<feed xmlns='http://www.w3.org/2005/Atom'>
<title>slang.git/source/slang-record-replay/record/slang-module.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-03-20T15:38:46+00:00</updated>
<entry>
<title>Add -dump-module command to slangc (#6638)</title>
<updated>2025-03-20T15:38:46+00:00</updated>
<author>
<name>cheneym2</name>
<email>acheney@nvidia.com</email>
</author>
<published>2025-03-20T15:38:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=de6cc94e3b7fa5d1b8eeb53993dbf3ca2cec1cc1'/>
<id>urn:sha1:de6cc94e3b7fa5d1b8eeb53993dbf3ca2cec1cc1</id>
<content type='text'>
* Add -dump-module command to slangc

The new -dump-module command to slangc will load and disassemble a slang module, similar to what would be seen by the -dump-ir command, except that -dump-ir tells slangc to print IR as it performs some compilation command. That is, -dump-ir requires
some larger compilation task.

-dump-module on the otherhand requires no additional goal and will simply load a module and print its IR to stdout independently from other compilation steps.

Its intended purpose is to inspect .slang-module files on disk.
It can also be used on .slang files which will be parsed and lowered
if slang does not find an associated ".slang-module" version of the
module on disk.

The compilation API is extended with a new IModule::disassemble()
method which retrieves the string representation of the dumped IR.

Closes #6599

* format code

* Use FileStream not FILE

* format code

---------

Co-authored-by: slangbot &lt;186143334+slangbot@users.noreply.github.com&gt;
Co-authored-by: Ellie Hermaszewska &lt;ellieh@nvidia.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>Add interfaces for retrieving separate linkable downstream binaries (#5128)</title>
<updated>2024-10-04T14:20:57+00:00</updated>
<author>
<name>cheneym2</name>
<email>acheney@nvidia.com</email>
</author>
<published>2024-10-04T14:20:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=f521c2002e6b664944c6c39bab767dca1802887a'/>
<id>urn:sha1:f521c2002e6b664944c6c39bab767dca1802887a</id>
<content type='text'>
* Implement separate downstream library interface

Create a new com interface to house the methods for
precompiling slang modules to target code.

Add methods to count dependent modules and scrape
them for downstream target binaries such that the
downstream target binaries are linkabe outside
of slang, e.g. via spirv-link or dxc.

Fixes #5147

* Rename to _Experimental

Clearly identify this as an interface subject to change.</content>
</entry>
<entry>
<title>capture component type (#4967)</title>
<updated>2024-08-30T20:57:11+00:00</updated>
<author>
<name>kaizhangNV</name>
<email>149626564+kaizhangNV@users.noreply.github.com</email>
</author>
<published>2024-08-30T20:57:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=3cf5935b434a8b9a07a6df5a6ab4c4dc373a1ac3'/>
<id>urn:sha1:3cf5935b434a8b9a07a6df5a6ab4c4dc373a1ac3</id>
<content type='text'>
* Refactor the IComponentType recording

Refactor the `IComponentType` recording by creating a abstract class
`IComponentTypeRecorder` to record all the methods of `IComponentType`,
so that `ICompositeComponentType`, `IModule`, 'IEntryPoint',
'ITypeConformance' can share the same recording implementation.

Capture the out IComponentType from
linkWithOptions()
link()
specialize()
renameEntryPoint()

* fix bugs

* Finish the unimeplemented functions in json consumer

Fix the address print to use 64 bit hex.
Fix the reference count issue when allocating new recorder object.

* Disable few examples using reflection APIs

* Add gpu-printing example into slang-test

* Replace of using std::unique_ptr with RefPtr</content>
</entry>
<entry>
<title>Migrate examples (#4920)</title>
<updated>2024-08-27T16:53:16+00:00</updated>
<author>
<name>kaizhangNV</name>
<email>149626564+kaizhangNV@users.noreply.github.com</email>
</author>
<published>2024-08-27T16:53:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=59c23b96b3649e77f5428c32e47b4401a802c604'/>
<id>urn:sha1:59c23b96b3649e77f5428c32e47b4401a802c604</id>
<content type='text'>
* Migrate cpu-hello-world to new slang API

    Migrate cpu-hello-world to new slang API, and also convert this example
    as one of the unit test.

* Add 'shader-object' to slang-unit-test

* Convert ray-tracing example into unit-test

    Convert ray-tracing example into unit-test

* Fix some replay bugs:
  - Wrong decode type in 'getEntryPointHostCallable'.
  - Mistakes in computing the output buffer size.
  - Wrong decode type in array size in specialize() call.
  - When capture entrypoint, we should increase the reference count
     for the allocated entrypoint recorder object, because that is
     allocated by record layer, it should be owned by the layer, user
     should not be able to free it.
  - Improve json consumer on the prelude text.

* Test verify change:
In our test, we add a "callIdx" string at beginning of the hash-code
string, as there could be more than one modules in the example, so they
could call 'getEntryPointHash' multiple times, in order for the test
can identify them, add "callIdx: &lt;number&gt;" as the key word.</content>
</entry>
<entry>
<title>Feature/capture unit test (#4898)</title>
<updated>2024-08-22T17:18:44+00:00</updated>
<author>
<name>kaizhangNV</name>
<email>149626564+kaizhangNV@users.noreply.github.com</email>
</author>
<published>2024-08-22T17:18:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=b5bb82411cc6101b66283f7d0abca7ceb58aa2f6'/>
<id>urn:sha1:b5bb82411cc6101b66283f7d0abca7ceb58aa2f6</id>
<content type='text'>
* record/replay: Add tests

Modify the hello-world example to generate the hash code for the
entry point spirv code, so that we can compare it with replaying
the example.

Add the test script to run the example and compare the hash code
with replaying it.

* Check nullptr for out Diagnostics

We need to check whether the output Diagnostics is a nullptr,
because it's allowed.

* Fix the double free pointers

* Add triangle example as the new test for record-replay

Change the example base to add the offline rendering path
because we don't want to display anything when we're in the
test mode.

This change involves introducing a TestBase that will parse
the command line option. It will decide whether we are in
the test mode.

Disable all the swapchain and windows related creation, instead
we will only create one single framebuffer for the render target.

* Address comments

TODO:
In the follow up patches, I will add more tests and integrate the test flow into slang-unit-test.</content>
</entry>
<entry>
<title>Make precompileForTargets work with Slang API (#4845)</title>
<updated>2024-08-15T16:36:41+00:00</updated>
<author>
<name>cheneym2</name>
<email>acheney@nvidia.com</email>
</author>
<published>2024-08-15T16:36:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=27b2229baa635f4cd6316d987a05ae8979ceab68'/>
<id>urn:sha1:27b2229baa635f4cd6316d987a05ae8979ceab68</id>
<content type='text'>
* Make precompileForTargets work with Slang API

precompileForTargets, renamed to precompileForTarget, does not need
an EndToEndCompileRequest and some objects created from it are not
necessary either.

Take only a target enum and a diagnostic blob as input and handle
everything else internally, such as creating the TargetReq with
chosen profile.

Fixes #4790

* Update slang-module.cpp

* Update slang-module.cpp</content>
</entry>
<entry>
<title>Feature/replayer (#4750)</title>
<updated>2024-07-31T20:03:27+00:00</updated>
<author>
<name>kaizhangNV</name>
<email>149626564+kaizhangNV@users.noreply.github.com</email>
</author>
<published>2024-07-31T20:03:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=bab4b821dc6bcee4ff86751743762584c17e9103'/>
<id>urn:sha1:bab4b821dc6bcee4ff86751743762584c17e9103</id>
<content type='text'>
* record/replay: Implement the json consumer

Finish the implementation of json consumer.

Fix some bug in the block processing as Tailer is not a necessary block
so if the Magic bit is "HEAD", we should keep processing.

* record/replay: Implement the replayer component

Implement the replayer consumer, and also finish the slang-replay
standalone app that will run the while replayer.

It can take an option "--convert-json | -cj" which will convert
the record binary file to a human readable json file.

If there is no option provided, it will replay the record file by
default.

TODO: #4764 is created to remove the std::filesystem usage.</content>
</entry>
<entry>
<title>Feature/capture (#4625)</title>
<updated>2024-07-23T15:45:26+00:00</updated>
<author>
<name>kaizhangNV</name>
<email>149626564+kaizhangNV@users.noreply.github.com</email>
</author>
<published>2024-07-23T15:45:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.yummers.dev/slang.git/commit/?id=986256ffb92ab7c8fc7cf9f2c424919a439a824f'/>
<id>urn:sha1:986256ffb92ab7c8fc7cf9f2c424919a439a824f</id>
<content type='text'>
* Add decoder

* Add a replay executable to consume the decoded content

Add file-processor.cpp/h where we implement the logic to process
the captured file block by block. Each block is:
function header + parameter buffer + function tailer + function
output[optional].

After reading one block, the block of data is sent to decoder module
to dispatch the corresponding API.

Add slang-decoder.cpp/h where we implement the logic to dispatch
the slang API according to the input block data.

- Rename api_callId.h to capture-format.h
- Renmae capture_utility.cpp to capture-utility.cpp
- Renmae capture_utility.h to capture-utility.h
- Change the #include file name accordingly.

* Reorganize source files structure

Move all the capture logic code into `capture` directory.
 - the capture code will be build with slang dll.

Move all the replay logic code into `relay` directoy.
 - the replay code is not part of slang dll, it will be built
   as a stand alone binary and link against slang dll.

Change the #include file names accordingly.

Add tools/slang-replay/main.cpp for the slang-replay stand alone
binary place holder. Will implement it later.

Update premake5.lua accordingly.

* Update cmake files

Update cmake files to change the build process for
capture and relay system.

 - capture component should be build with slang dll, so we
   should not include replay component.
 - replay component should be a separate executable tool, which
   should not include capture component.
 - In order to easy use our current cmake infrastructure, move
   the shared files to a `util` folder
 - change the header include path

* Redesgin the interfaces of consumers

Fix some issues in capture
Finish implementing all slang-decoder functions

* Fix the AppleClang build issue

* Address few comments

- Fix the weird indent issues.
- Correct the function name for CreateGlobalSession()
- Rename file-processor to captureFile-processor to be more specific.
- Use Slang::List instead of std::vector

* record/replay: name refactor change

Refactor the naming.

Change the name "encoder/capture" to "record".</content>
</entry>
</feed>
