diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6807fe9..487f31c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,6 +23,9 @@ jobs: with: python-version: "3.12" - run: python bindgen/extract/test_abi_lock.py + # Constant folding is clang's own, so this one needs a real libclang: the bindings come from + # the wheel, and configure_libclang() picks up the runner image's LLVM as it would locally. + - run: pip install libclang==18.1.1 && python bindgen/extract/test_const_eval.py smoke: name: smoke (${{ matrix.platform }}) diff --git a/CLAUDE.md b/CLAUDE.md index d840837..556bd4e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -42,11 +42,16 @@ walkthrough as its acceptance test, and Java-implemented COM upcalls serving imp 2. `./gradlew :bindgen:run --args="api/slang-api.json slang/src/main/java"` One-time venv setup: `python3 -m venv bindgen/extract/.venv && bindgen/extract/.venv/bin/pip install libclang`. `api/slang-abi.lock` is append-only ABI enforcement; `--reset-lock` is only for lock-format - migrations and must be justified in the commit message. Struct sizes and derived count + migrations, or — with James's go-ahead — for rebasing onto a break upstream has already + shipped (2026.17 repurposed `IGlobalSession` slot 32; see the 2026.19 bump commit). Either way, + justify it in the commit message and list every lock line it drops. The bump workflow never + resets, so a bump across an upstream break is done by hand. Struct sizes and derived count sentinels (`CountOf`, `SLANG_STAGE_COUNT`, …) are locked monotonically — they may grow, since an append moves them by construction — and everything else byte-exact. `python3 bindgen/extract/test_abi_lock.py` covers that arithmetic and needs no libclang; run it after touching `extract_api.py`, and read the `SENTINEL_NAME` comment before widening the rule. + `bindgen/extract/test_const_eval.py` (venv python, needs libclang) covers global-constant + folding, which a wrong value would otherwise get frozen into the lock. - ABI-drift canary: `.github/workflows/abi-canary.yml` runs weekly, parsing Slang upstream headers and enforcing the committed lock (`extract_api.py --verify`, which checks the lock without rewriting it). A non-append change fails the run; benign additions are reported. Run diff --git a/README.md b/README.md index dd7c2c9..afecfb1 100644 --- a/README.md +++ b/README.md @@ -15,14 +15,14 @@ directly. Windows, macOS, and Linux, on x86_64 and aarch64. Requires JDK 25+. | Artifact | Purpose | |--------------------------------------------------------|---| -| `io.github.refux:slang-java:0.0.9` | The library: compiler API, reflection, Java file systems | -| `io.github.refux:slang-java-natives:0.0.9:-` | The official Slang binaries, as one classifier per platform: `windows`, `linux`, or `macos` × `x86_64` or `aarch64` | +| `io.github.refux:slang-java:0.0.10` | The library: compiler API, reflection, Java file systems | +| `io.github.refux:slang-java-natives:0.0.10:-` | The official Slang binaries, as one classifier per platform: `windows`, `linux`, or `macos` × `x86_64` or `aarch64` | The library version tracks slang-java's own API, not Slang's. To see which Slang release a jar binds, read its manifest — no resolving, no running: ```bash -unzip -p slang-java-0.0.9.jar META-INF/MANIFEST.MF +unzip -p slang-java-0.0.10.jar META-INF/MANIFEST.MF ``` `Slang-Version` there is a **floor**, not a lockstep: it names the release the bindings were @@ -30,6 +30,11 @@ generated against, and any newer Slang works, because Slang's public ABI is appe value is available at runtime as `SlangLibrary.PINNED_SLANG_VERSION`, alongside `GlobalSession.buildTagString()` for the library actually loaded. +Serialized modules (`Module.serialize()`) are versioned separately and more narrowly: each Slang +release reads only a small range of module versions, so treat them as a cache tied to the release +that wrote them. `Session.loadModuleFromIr` throws a `SlangCompileException` for anything the +loaded Slang cannot read, and `Session.moduleInfo` tells you up front which version a blob is. + ## Getting started Add the library and the natives classifier for your machine — compute it from the host so you @@ -46,8 +51,8 @@ val slangNatives = "${ }-${if (System.getProperty("os.arch") in listOf("aarch64", "arm64")) "aarch64" else "x86_64"}" dependencies { - implementation("io.github.refux:slang-java:0.0.9") - runtimeOnly("io.github.refux:slang-java-natives:0.0.9:$slangNatives") + implementation("io.github.refux:slang-java:0.0.10") + runtimeOnly("io.github.refux:slang-java-natives:0.0.10:$slangNatives") } tasks.withType { @@ -60,10 +65,10 @@ classpath together and the loader picks the host's at runtime (LWJGL-style): ```kotlin dependencies { - implementation("io.github.refux:slang-java:0.0.9") - runtimeOnly("io.github.refux:slang-java-natives:0.0.9:macos-aarch64") - runtimeOnly("io.github.refux:slang-java-natives:0.0.9:windows-x86_64") - runtimeOnly("io.github.refux:slang-java-natives:0.0.9:linux-x86_64") + implementation("io.github.refux:slang-java:0.0.10") + runtimeOnly("io.github.refux:slang-java-natives:0.0.10:macos-aarch64") + runtimeOnly("io.github.refux:slang-java-natives:0.0.10:windows-x86_64") + runtimeOnly("io.github.refux:slang-java-natives:0.0.10:linux-x86_64") } ``` diff --git a/api/slang-abi.lock b/api/slang-abi.lock index ccea581..32ebd58 100644 --- a/api/slang-abi.lock +++ b/api/slang-abi.lock @@ -1,5 +1,5 @@ # slang-java ABI lock -- append-only; regenerated by extract_api.py -# slang 2026.16 +# slang 2026.19 enum BindingType BaseMask 255 enum BindingType CombinedTextureSampler 7 enum BindingType ConstantBuffer 3 @@ -21,16 +21,19 @@ enum BindingType TypedBuffer 5 enum BindingType Unknown 0 enum BindingType VaryingInput 11 enum BindingType VaryingOutput 12 +enum BitfieldPackingRules Default 0 +enum BitfieldPackingRules LegacyMSBFirstMSVC 2 +enum BitfieldPackingRules MSVC 1 enum BuiltinModuleName Core 0 enum BuiltinModuleName GLSL 1 enum CompilerOptionName AllowGLSL 91 enum CompilerOptionName ArchiveType 96 enum CompilerOptionName BindlessSpaceIndex 93 +enum CompilerOptionName BitfieldPackingRules 160 enum CompilerOptionName Capability 39 enum CompilerOptionName CompileCoreModule 97 enum CompilerOptionName CompilerPath 61 -enum CompilerOptionName CompilerVersion 153 -enum CompilerOptionName CountOf 158 +enum CompilerOptionName CountOf 161 enum CompilerOptionName CountOfParsableOptions 111 enum CompilerOptionName CoverageManifestOutput 150 enum CompilerOptionName DebugInfoIncludeSource 157 @@ -88,6 +91,7 @@ enum CompilerOptionName ForceCLayout 129 enum CompilerOptionName ForceDXLayout 117 enum CompilerOptionName GLSLForceScalarLayout 55 enum CompilerOptionName GenerateWholeProgram 114 +enum CompilerOptionName GetCompilerPath 159 enum CompilerOptionName GetModuleInfo 122 enum CompilerOptionName GetSupportedModuleVersions 123 enum CompilerOptionName Help 4 @@ -156,6 +160,7 @@ enum CompilerOptionName Target 17 enum CompilerOptionName TraceBranchCoverage 149 enum CompilerOptionName TraceCoverage 145 enum CompilerOptionName TraceCoverageBinding 146 +enum CompilerOptionName TraceCoverageBindlessIndex 158 enum CompilerOptionName TraceCoverageBoolean 152 enum CompilerOptionName TraceCoverageCounterByteWidth 151 enum CompilerOptionName TraceCoverageReservedSpace 147 @@ -442,6 +447,7 @@ enum SlangMiscConstants SLANG_TARGET_FLAG_PARAMETER_BLOCKS_USE_REGISTER_SPACES 1 enum SlangMiscConstants kDefaultTargetFlags 1024 enum SlangMiscConstants kInvalidCoverageCounterIndex 4294967295 enum SlangMiscConstants kSessionFlags_None 0 +enum SlangMiscConstants kUnboundedSyntheticResourceArraySize 4294967295 enum SlangModifierID SLANG_MODIFIER_CONST 3 enum SlangModifierID SLANG_MODIFIER_DIFFERENTIABLE 6 enum SlangModifierID SLANG_MODIFIER_EXPORT 4 @@ -717,6 +723,7 @@ fn spReflectionParameter_GetBindingIndex fn spReflectionParameter_GetBindingSpace fn spReflectionTypeLayout_GetCategoryByIndex fn spReflectionTypeLayout_GetCategoryCount +fn spReflectionTypeLayout_GetContentVarLayout fn spReflectionTypeLayout_GetElementStride fn spReflectionTypeLayout_GetElementTypeLayout fn spReflectionTypeLayout_GetElementVarLayout @@ -904,7 +911,7 @@ iface IGlobalSession 29 compileBuiltinModule iface IGlobalSession 3 createSession iface IGlobalSession 30 loadBuiltinModule iface IGlobalSession 31 saveBuiltinModule -iface IGlobalSession 32 getDownstreamCompilerVersion +iface IGlobalSession 32 getDownstreamCompilerPath iface IGlobalSession 4 findProfile iface IGlobalSession 5 setDownstreamCompilerPath iface IGlobalSession 6 setDownstreamCompilerPrelude @@ -1092,6 +1099,7 @@ struct SyntheticResourceInfo field access 24 struct SyntheticResourceInfo field arraySize 16 struct SyntheticResourceInfo field binding 36 struct SyntheticResourceInfo field bindingType 12 +struct SyntheticResourceInfo field bindlessIndex 56 struct SyntheticResourceInfo field debugName 48 struct SyntheticResourceInfo field entryPointIndex 28 struct SyntheticResourceInfo field id 8 @@ -1100,7 +1108,7 @@ struct SyntheticResourceInfo field space 32 struct SyntheticResourceInfo field structSize 0 struct SyntheticResourceInfo field uniformOffset 40 struct SyntheticResourceInfo field uniformStride 44 -struct SyntheticResourceInfo size 56 +struct SyntheticResourceInfo size 64 struct TargetDesc field compilerOptionEntries 32 struct TargetDesc field compilerOptionEntryCount 40 struct TargetDesc field flags 16 diff --git a/api/slang-api.json b/api/slang-api.json index 4e26f97..1b09bda 100644 --- a/api/slang-api.json +++ b/api/slang-api.json @@ -138,6 +138,26 @@ } ] }, + { + "name": "BitfieldPackingRules", + "repr": { + "k": "i32" + }, + "values": [ + { + "name": "Default", + "value": 0 + }, + { + "name": "MSVC", + "value": 1 + }, + { + "name": "LegacyMSBFirstMSVC", + "value": 2 + } + ] + }, { "name": "BuiltinModuleName", "repr": { @@ -772,10 +792,6 @@ "name": "TraceCoverageBoolean", "value": 152 }, - { - "name": "CompilerVersion", - "value": 153 - }, { "name": "SPIRVUnifiedDescriptorHeapStride", "value": 154 @@ -792,10 +808,22 @@ "name": "DebugInfoIncludeSource", "value": 157 }, + { + "name": "TraceCoverageBindlessIndex", + "value": 158 + }, + { + "name": "GetCompilerPath", + "value": 159 + }, + { + "name": "BitfieldPackingRules", + "value": 160 + }, { "derived": true, "name": "CountOf", - "value": 158 + "value": 161 } ] }, @@ -2191,6 +2219,11 @@ { "name": "kInvalidCoverageCounterIndex", "value": 4294967295 + }, + { + "doc": "`SyntheticResourceInfo::arraySize` when the synthetic resource is an\nunbounded (runtime-sized) descriptor array, so the compiler cannot\nknow how many descriptors the host will supply.\n\nSpelled the same way as `SLANG_UNBOUNDED_SIZE` (`~size_t(0)`) rather\nthan casting it down: both mean \"every bit set\" in their respective\nwidths, but narrowing the 64-bit macro to 32 bits is a truncating\nconversion that MSVC rejects under warnings-as-errors (C4310).", + "name": "kUnboundedSyntheticResourceArraySize", + "value": 4294967295 } ] }, @@ -4716,6 +4749,24 @@ "k": "u32" } }, + { + "doc": "Get the variable layout for the \"content\" of a container-like type layout.\n\nThe \"content\" is what a container holds, as opposed to the container (\"wrapper\") itself: the\nsingle element for a constant buffer / parameter block / texture buffer, and the sequence of\nelements for a structured buffer. For a constant buffer / parameter block / texture buffer\nthis returns the element variable layout, whose offsets are relative to the container (they\naccount for the container's own resource usage). For a structured buffer this returns a\nvariable layout over an (unbounded) array of the element type at offset zero, so element\nstride and element type can be queried through the normal array-layout accessors. Returns\nnull for type layouts that are not container-like.", + "group": "reflection", + "name": "spReflectionTypeLayout_GetContentVarLayout", + "params": [ + { + "name": "type", + "type": { + "k": "ptr", + "to": "SlangReflectionTypeLayout" + } + } + ], + "ret": { + "k": "ptr", + "to": "SlangReflectionVariableLayout" + } + }, { "doc": "Get the stride between elements of an array type layout.\n\nReturns `SLANG_UNBOUNDED_SIZE` for unbounded resources.\nReturns `SLANG_UNKNOWN_SIZE` when element stride depends on unresolved generic parameters or\nlink-time constants.", "group": "reflection", @@ -8253,7 +8304,7 @@ "experimental": false, "methods": [ { - "doc": "Number of runtime counter slots in the synthesized coverage\nbuffer. This can differ from `getEntryCount()` once a coverage\nmode has counterless metadata entries, shares one counter across\nseveral source entries, or reports entries whose counts are\nderived from other counters.", + "doc": "Number of runtime counter slots in the synthesized coverage\nbuffer. Never larger than `getEntryCount()`, and smaller when\nline coverage shares one counter across the source entries of a\nstraight-line region. Function and branch entries always take a\ndedicated counter, so the two counts are equal for a compile that\nenables only those modes, or for line coverage where every marker\nlands in its own basic block. Size the counter readback buffer\nfrom this value, never from the entry count.", "name": "getCounterCount", "params": [], "ret": { @@ -8302,7 +8353,7 @@ "slot": 6 }, { - "doc": "Number of source coverage entries available through\n`getEntryInfo`. The current line/function/branch producers have\none entry per counter, but future source-region coverage may\nexpose entries that do not map one-to-one with runtime counter\nslots.", + "doc": "Number of source coverage entries available through\n`getEntryInfo`. Every coverage marker produces one entry, so\nthis is NOT the number of runtime counters: several entries may\nname the same `counterIndex`. Use `getCounterCount()` to size\nthe readback buffer.", "name": "getEntryCount", "params": [], "ret": { @@ -9047,8 +9098,8 @@ "slot": 31 }, { - "doc": "Get the version of the downstream/pass-through compiler that Slang will actually load and\nuse for `passThrough`, applying the same lazy discovery and library search order used during\ncompilation. This lets a client key its behavior off the exact library Slang selected (for\nexample, the specific NVRTC that will compile CUDA), which can differ from a version the client\nmight discover on its own.\n\nThis is not a cheap accessor: the first call for a given `passThrough` performs discovery and\nloads the downstream library into the process (then memoizes it for subsequent calls).\n\nOnly some downstream compilers report a numeric version (e.g. NVRTC, DXC, the C/C++ toolchains);\nothers (e.g. the glslang family and Tint) always report `(0,0)`. The version is read uniformly\nfrom the loaded compiler's descriptor, so a versionless-but-loaded compiler still returns\nSLANG_OK with major/minor 0 - which the result alone does not distinguish from a genuine 0.0.\n@param passThrough The downstream compiler to query (e.g. SLANG_PASS_THROUGH_NVRTC).\n@param outMajor Receives the major version number. May be null.\n@param outMinor Receives the minor version number. May be null.\n@return SLANG_OK if the compiler was located and loaded (see the versionless note above).\nSLANG_E_NOT_FOUND if the compiler could not be located or loaded, and likewise for\nSLANG_PASS_THROUGH_NONE or an out-of-range value - the result code alone does not distinguish an\ninvalid argument from a compiler that is simply not installed.", - "name": "getDownstreamCompilerVersion", + "doc": "Get the on-disk path of the downstream/pass-through compiler that Slang will actually load\nand use for `passThrough`, applying the same lazy discovery and library search order used\nduring compilation. This lets a client locate the exact library Slang selected - for example,\nthe specific NVRTC that will compile CUDA - and load it itself to query capabilities (such as\nthe supported architectures) directly.\n\nThis is not a cheap accessor: the first call for a given `passThrough` performs discovery and\nloads the downstream library into the process (then memoizes it for subsequent calls).\n\nThe path is recovered from the loaded shared library, so it is available for the shared-library\npass-throughs (e.g. NVRTC, DXC, FXC, glslang). A pass-through backed by an executable located\non `PATH` (e.g. Clang/GCC/VS) or a target without shared-library introspection (e.g. WASM) has\nno such path and returns SLANG_E_NOT_AVAILABLE, which the client must keep distinct from\nSLANG_E_NOT_FOUND (the compiler was not located at all).\n@param passThrough The downstream compiler to query (e.g. SLANG_PASS_THROUGH_NVRTC).\n@param outPath Must be non-null. On SLANG_OK receives the resolved library path as a blob; left\nuntouched on any failure return.\n@return SLANG_OK if the compiler was located, loaded, and its path recovered.\nSLANG_E_NOT_FOUND if the compiler could not be located or loaded (and likewise for\nSLANG_PASS_THROUGH_NONE or an out-of-range value). SLANG_E_NOT_AVAILABLE if the compiler was\nloaded but has no recoverable on-disk path -- it is not backed by a shared library (an\nexecutable-based command-line compiler such as Clang/GCC/VS, or Metal) or the platform has no\nshared-library introspection (e.g. WASM).", + "name": "getDownstreamCompilerPath", "params": [ { "name": "passThrough", @@ -9061,17 +9112,10 @@ } }, { - "name": "outMajor", - "type": { - "k": "ptr", - "to": "int" - } - }, - { - "name": "outMinor", + "name": "outPath", "type": { "k": "ptr", - "to": "int" + "to": "ISlangBlob *" } } ], @@ -9511,7 +9555,7 @@ "slot": 4 }, { - "doc": "Load a module from Slang source code.", + "doc": "Load a module from Slang source code.\n\nIf `source` is null and `path` names a readable file, the module is\nloaded from that file's contents. If `source` is null and `path` cannot\nbe read, the call returns null and (when `outDiagnostics` is provided)\nwrites a `CannotOpenFile` diagnostic.", "name": "loadModuleFromSource", "params": [ { @@ -11356,6 +11400,11 @@ "class": "TypeLayoutReflection", "method": "getContainerVarLayout" }, + { + "callee": "spReflectionTypeLayout_GetContentVarLayout", + "class": "TypeLayoutReflection", + "method": "getContentVarLayout" + }, { "callee": "spReflectionTypeLayout_getDescriptorSetCount", "class": "TypeLayoutReflection", @@ -11727,7 +11776,7 @@ "method": "hasDefaultValue" } ], - "slangVersion": "2026.16", + "slangVersion": "2026.19", "structs": [ { "align": 4, @@ -12159,7 +12208,7 @@ } }, { - "doc": "Counter slot used by this entry, or\n`kInvalidCoverageCounterIndex` when the entry has no runtime\ncounter. The current line/function/branch producers use one\ndirect counter per entry. Future source-region coverage may use\n`kInvalidCoverageCounterIndex` for entries whose count is\nderived from other counters or represented through tail-extended\nfields.", + "doc": "Counter slot used by this entry, or\n`kInvalidCoverageCounterIndex` when the entry has no runtime\ncounter.\n\nThis is NOT unique per entry. Line coverage coalesces entries\nthat provably execute together (those in one basic block with\nnothing between them that can abandon the invocation) onto a\nsingle counter, which is what keeps instrumented shader code\nsmall. Several entries therefore report the same\n`counterIndex`, and `getCounterCount()` is correspondingly\nsmaller than the entry count.\n\nRead results per entry (`counters[entry.counterIndex]` for each\nentry), never per counter: a counter does not identify one\nsource location. Sizing a readback buffer from the entry count\nrather than the counter count is a bug.\n\nFunction and branch entries always use a dedicated counter.\nFuture coverage modes may use `kInvalidCoverageCounterIndex`\nfor entries whose count is derived from other counters or\nrepresented through tail-extended fields.", "name": "counterIndex", "offset": 20, "type": { @@ -12623,7 +12672,7 @@ } }, { - "doc": "Number of logical resources in the synthetic binding. Most\ncurrent instrumentation resources are scalar (`1`).", + "doc": "Number of logical resources in the synthetic binding. Most\ninstrumentation resources are scalar (`1`).\n\n`kUnboundedSyntheticResourceArraySize` when the resource is an\nunbounded descriptor array whose descriptor count is a host\nruntime decision the compiler cannot see -- the coverage buffer\nunder `-trace-coverage-bindless-index` is declared this way\ndeliberately, so that a shader does not constrain how many\nshaders the host binds alongside it. A host sizing a descriptor\narray must not read this as a count.\n\nFor coverage, this sentinel and `bindlessIndex >= 0` are set\ntogether and always agree, so testing either one identifies the\nbindless form. They are separate fields because they answer\ndifferent questions -- `arraySize` describes the binding's shape\nfor any synthetic resource, while `bindlessIndex` says which\nelement this shader uses -- and a future synthetic resource\ncould be an unbounded array without having a per-shader index.", "name": "arraySize", "offset": 16, "type": { @@ -12701,10 +12750,18 @@ "k": "ptr", "to": "const char" } + }, + { + "doc": "Index of this shader's element within the synthetic resource's\ndescriptor array, or `-1` when the resource is bound as a single\ndescriptor rather than as an element of an array.\n\nCoverage sets this from `-trace-coverage-bindless-index`. In that\nform `__slang_coverage` is an unbounded array of buffers, so a\nsingle `(space, binding)` serves every shader in a pipeline and\neach shader accesses `__slang_coverage[bindlessIndex]`. Reading it\nback here saves a host from having to track the value it passed at\ncompile time in order to report on the result.\n\nThis field is past the v1 struct size, so it is only written when\nthe caller's `structSize` covers it. A caller compiled against an\nolder header keeps its own struct layout and never sees it.", + "name": "bindlessIndex", + "offset": 56, + "type": { + "k": "i32" + } } ], "name": "SyntheticResourceInfo", - "size": 56 + "size": 64 }, { "align": 8, diff --git a/bindgen/extract/extract_api.py b/bindgen/extract/extract_api.py index 1187f40..5a77815 100644 --- a/bindgen/extract/extract_api.py +++ b/bindgen/extract/extract_api.py @@ -24,6 +24,7 @@ """ import argparse +import ctypes import glob import json import os @@ -408,24 +409,55 @@ def base_slots(name): info["vtableSize"] = start + len(info["methods"]) +CXEVAL_INT = 1 # Index.h CXEvalResultKind::CXEval_Int +_evaluator = None + + +def evaluator(): + """libclang's constant evaluator (Index.h: clang_Cursor_Evaluate and clang_EvalResult_*), + which clang.cindex does not wrap. Bound on first use rather than at import, so importing this + module never touches libclang -- test_abi_lock.py imports it with clang stubbed out.""" + global _evaluator + if _evaluator is None: + lib = ci.conf.lib + for name, argtypes, restype in ( + ("clang_Cursor_Evaluate", [ci.Cursor], ctypes.c_void_p), + ("clang_EvalResult_getKind", [ctypes.c_void_p], ctypes.c_int), + ("clang_EvalResult_isUnsignedInt", [ctypes.c_void_p], ctypes.c_uint), + ("clang_EvalResult_getAsUnsigned", [ctypes.c_void_p], ctypes.c_ulonglong), + ("clang_EvalResult_getAsLongLong", [ctypes.c_void_p], ctypes.c_longlong), + ("clang_EvalResult_dispose", [ctypes.c_void_p], None)): + fn = getattr(lib, name) + fn.argtypes, fn.restype = argtypes, restype + _evaluator = lib + return _evaluator + + def const_var_value(cursor): - """Value of a global integer constant VarDecl: either a literal initializer or a reference - to an enum constant. Returns None for anything else (non-integers, complex expressions).""" + """Value of a global integer constant VarDecl, folded by clang itself. Returns None for + anything else (non-integers, or an initializer clang cannot fold to an integer). + + Folding is clang's job, not ours: this used to return the first integer literal in the + initializer's AST, which read Slang 2026.16.1's `kUnboundedSyntheticResourceArraySize = + ~uint32_t(0)` as 0 -- a wrong constant the lock would then have frozen.""" try: if vocab(cursor.type)["k"] not in ( "i8", "u8", "i16", "u16", "i32", "u32", "i64", "u64", "enum"): return None except SystemExit: return None - for node in cursor.walk_preorder(): - if node.kind == CK.DECL_REF_EXPR and node.referenced is not None \ - and node.referenced.kind == CK.ENUM_CONSTANT_DECL: - return node.referenced.enum_value - if node.kind == CK.INTEGER_LITERAL: - tokens = [t.spelling for t in node.get_tokens()] - if tokens: - return int(tokens[0].rstrip("uUlL"), 0) - return None + lib = evaluator() + result = lib.clang_Cursor_Evaluate(cursor) + if not result: + return None + try: + if lib.clang_EvalResult_getKind(result) != CXEVAL_INT: + return None + if lib.clang_EvalResult_isUnsignedInt(result): + return lib.clang_EvalResult_getAsUnsigned(result) + return lib.clang_EvalResult_getAsLongLong(result) + finally: + lib.clang_EvalResult_dispose(result) def extract_wrapper_calls(cursor, name, methods): diff --git a/bindgen/extract/test_const_eval.py b/bindgen/extract/test_const_eval.py new file mode 100644 index 0000000..7d61761 --- /dev/null +++ b/bindgen/extract/test_const_eval.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python3 +"""Unit tests for global-constant extraction (extract_api.const_var_value). + +Needs libclang, unlike test_abi_lock.py: what is under test is clang's own constant folding, +so stubbing it out would test nothing. Parses an in-memory snippet, so no Slang checkout or SDK. + + bindgen/extract/.venv/bin/python bindgen/extract/test_const_eval.py + +Background: Slang 2026.16.1 added `kUnboundedSyntheticResourceArraySize = ~uint32_t(0)`. The +extractor took the first integer literal in an initializer's AST, so it read that as 0, and the +lock would have frozen the wrong value. Every case below that is not a bare literal or a bare +enum reference returned a wrong value under that scheme. +""" + +import sys +import unittest +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parent)) +import extract_api # noqa: E402 + +ci = extract_api.ci + +SOURCE = """ +typedef int int32_t; +typedef unsigned int uint32_t; +typedef unsigned long long uint64_t; +enum Flags : uint32_t { kFlagA = 1u << 4, kFlagB = 1u << 10 }; +inline constexpr uint32_t kAllBits = ~uint32_t(0); +inline constexpr uint32_t kHexLiteral = 0xffffffffu; +inline constexpr uint32_t kEnumRef = kFlagB; +inline constexpr uint32_t kOred = kFlagA | kFlagB; +inline constexpr uint32_t kShifted = 1u << 31; +inline constexpr int32_t kNegative = -1; +inline constexpr uint64_t kWideAllBits = ~uint64_t(0); +inline constexpr float kNotAnInteger = 1.5f; +""" + + +class ConstVarValueTest(unittest.TestCase): + @classmethod + def setUpClass(cls): + extract_api.configure_libclang() + tu = ci.Index.create().parse( + "consts.cpp", args=["-x", "c++", "-std=c++17", "-nostdinc"], + unsaved_files=[("consts.cpp", SOURCE)]) + errors = [d.spelling for d in tu.diagnostics if d.severity >= ci.Diagnostic.Error] + if errors: + raise AssertionError(f"snippet did not parse: {errors}") + cls.values = {c.spelling: extract_api.const_var_value(c) + for c in tu.cursor.get_children() if c.kind == ci.CursorKind.VAR_DECL} + + def test_bitwise_not_folds_to_all_bits_set(self): + # The regression: the literal inside the cast is 0; the constant is not. + self.assertEqual(self.values["kAllBits"], 0xFFFFFFFF) + + def test_bitwise_not_folds_at_64_bits(self): + self.assertEqual(self.values["kWideAllBits"], 0xFFFFFFFFFFFFFFFF) + + def test_plain_literal(self): + self.assertEqual(self.values["kHexLiteral"], 0xFFFFFFFF) + + def test_enum_reference(self): + self.assertEqual(self.values["kEnumRef"], 1 << 10) + + def test_operators_on_enum_references(self): + self.assertEqual(self.values["kOred"], (1 << 4) | (1 << 10)) + + def test_shift(self): + self.assertEqual(self.values["kShifted"], 1 << 31) + + def test_negative_signed(self): + self.assertEqual(self.values["kNegative"], -1) + + def test_non_integer_is_skipped(self): + self.assertIsNone(self.values["kNotAnInteger"]) + + +if __name__ == "__main__": + unittest.main() diff --git a/gradle.properties b/gradle.properties index 8b8e3cb..87f1da9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,4 +4,4 @@ org.gradle.caching=true # Single source of truth for the published version (library + natives artifacts). # Release tags must match: tag v0.0.1 <-> version=0.0.1. group=io.github.refux -version=0.0.9 +version=0.0.10 diff --git a/natives/build.gradle.kts b/natives/build.gradle.kts index 2a32dfa..1532b55 100644 --- a/natives/build.gradle.kts +++ b/natives/build.gradle.kts @@ -14,7 +14,7 @@ import java.util.zip.ZipInputStream // SHA-256s. The per-platform subprojects (:natives:-) package those payloads as the // publishable io.github.refux:slang-java-natives-- artifacts. DESIGN.md §3.1/§7/§16. -val slangVersion = "2026.16" +val slangVersion = "2026.19" // os-arch → official release asset name. The plain linux zips target the release builders' // glibc; -glibc-2.27 / -2.28 variants exist upstream for older distros if ever needed. diff --git a/natives/manifests/linux-aarch64.json b/natives/manifests/linux-aarch64.json index 1bdacaf..fbb3ab0 100644 --- a/natives/manifests/linux-aarch64.json +++ b/natives/manifests/linux-aarch64.json @@ -1,45 +1,50 @@ { - "slangVersion": "2026.16", + "slangVersion": "2026.19", "platform": "linux-aarch64", - "asset": "slang-2026.16-linux-aarch64.zip", - "url": "https://github.com/shader-slang/slang/releases/download/v2026.16/slang-2026.16-linux-aarch64.zip", - "sha256": "2090c3e49f63d20b6edbc8d6aadce65096ed3727d6ab1f40ded255d7f014b5f5", + "asset": "slang-2026.19-linux-aarch64.zip", + "url": "https://github.com/shader-slang/slang/releases/download/v2026.19/slang-2026.19-linux-aarch64.zip", + "sha256": "39632fa19ca3ea9d65253c6f5450d1971a6f3e7b578a1e1998c7ce2b28048221", "files": [ - {"path": "lib/libgfx.so.0.2026.16", "size": 972056, "sha256": "b93b44b1aeb1dc21de2ddad0df5d904f9b72e267751777e2812e324c5a967630"}, - {"path": "lib/libslang-compiler.so.0.2026.16", "size": 28860736, "sha256": "e0e02dec891f8c310f8393c9ccc050e53d6b0e4891b70e77fcf70a7d0fcf6519"}, - {"path": "lib/libslang-glsl-module-2026.16.so", "size": 1331728, "sha256": "a6018ca1b79b498afc0f0afbe29c75b97e71bdd28e68066ed25dba284e648ac0"}, - {"path": "lib/libslang-glslang-2026.16.so", "size": 9513904, "sha256": "36543c7f04e58de9d4396089e41c9d0c1b95de9960b2004e3d94d442af0d44b1"}, - {"path": "lib/libslang-rt.so.0.2026.16", "size": 308816, "sha256": "f113d200ed6fc613d511fb734e235cb7f6294e4ec33f1ed564120c813d162172"}, - {"path": "lib/slang-standard-module-2026.16/experimental/workgraph.slang", "size": 8900, "sha256": "4ccb32d0cc2a4d735ae2da16ef6908d24d0a991753e8593ff01ef433e3aab078"}, - {"path": "lib/slang-standard-module-2026.16/experimental/workgraph.slang-module", "size": 111548, "sha256": "c0e27fbbe3aada94477925d5debcd76b3ccd8bb818c054a698c0dcc2feb13187"}, - {"path": "lib/slang-standard-module-2026.16/slang/WaveMatrix.slang", "size": 36043, "sha256": "7c54344d6f5a0570d6417888296753e6b341e041ca4a6a39335e14af87ffd27e"}, - {"path": "lib/slang-standard-module-2026.16/slang/accelerate-vector-coopmat.slang", "size": 11581, "sha256": "fa3261f635f146ac70fb5dec91a1408121f03798c42ee7d343574bf2b654f06d"}, - {"path": "lib/slang-standard-module-2026.16/slang/activations.slang", "size": 5316, "sha256": "b3f34b0fa1d20a1e7e37a30234b2af5e0ef8bf0ace410592dda205ac9c67fb67"}, - {"path": "lib/slang-standard-module-2026.16/slang/bindless-storage.slang", "size": 16896, "sha256": "d55135354347cd2333caa2346ef79527a9bc8dfd0db9313463e44c53246a3337"}, - {"path": "lib/slang-standard-module-2026.16/slang/hash-function.slang", "size": 3610, "sha256": "f730f5bb868d8f8805ae9ce6420599b4c43cec17decfedda001705cab3107bc1"}, - {"path": "lib/slang-standard-module-2026.16/slang/iactivation.slang", "size": 1012, "sha256": "5ae0684a7f6d796eceb16d9dd91c6f391ce462b0ae5a88b4b64c8e03939b60cd"}, - {"path": "lib/slang-standard-module-2026.16/slang/iencoder.slang", "size": 902, "sha256": "2177cea7d3da4e4577ee840989fa2a7502939ef14bd57ceed4e6dc870ce3d005"}, - {"path": "lib/slang-standard-module-2026.16/slang/ilayer.slang", "size": 966, "sha256": "3e47ef65ea31f6cff857d8c3158755e679d206058433cd635ec55de87fdbc3fa"}, - {"path": "lib/slang-standard-module-2026.16/slang/inline-vector.slang", "size": 6794, "sha256": "50c9d0726c6e8ea93b2d43c46628b8ca30e3ab02b79942d132040859af214600"}, - {"path": "lib/slang-standard-module-2026.16/slang/istorages.slang", "size": 4048, "sha256": "d1818c0eef09cce3e677d591b7a2e1b09b8770bcf960f97b78f6a29b7c19d2cb"}, - {"path": "lib/slang-standard-module-2026.16/slang/ivector.slang", "size": 4291, "sha256": "1c44acd25cd5ad63756494ef6066865f6e7eef38f486f86beb2fdad2d59e79b3"}, - {"path": "lib/slang-standard-module-2026.16/slang/layers.slang", "size": 3939, "sha256": "0fce3dc9f13022516addc2df9d8dc1751962f9b2207533206e175449ca3a0e00"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-linear-layout-help.slang", "size": 57393, "sha256": "2d29e94392b54d3605c741c9d04bc7bf3cef181afd39a7d6d398a77033f6089e"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-cuda.slang", "size": 21835, "sha256": "0d8de6257095a8bc498b48e2ed2a6be7ddae1b692dd40a347ace2610a8a50cb4"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-layout-helper.slang", "size": 5511, "sha256": "4c82a16fd615b2284fa45bc4ae2163a4346b0ce474315541632c98d999dce3a3"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-metal.slang", "size": 28953, "sha256": "180cbf0b52cb01479e2ec197f5340ac7c5814a18299203aa6c8fa38ec72edb7e"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-vulkan.slang", "size": 17425, "sha256": "345b5b19f8303dd11cfe128e8fe9b1c935c9387af7c85679ed35465c6e366c14"}, - {"path": "lib/slang-standard-module-2026.16/slang/network-parameter-layout-converter.slang", "size": 19874, "sha256": "2ed702f22ab8db77715aebdb5f6ef98068019c8da1d86b08f8b6a8696004598a"}, - {"path": "lib/slang-standard-module-2026.16/slang/neural.slang", "size": 1861, "sha256": "9c13d2c2f46557d704cb0f41c59fd0335243f9dc5692f90b72dfeb6a4db13717"}, - {"path": "lib/slang-standard-module-2026.16/slang/neural.slang-module", "size": 5508796, "sha256": "c620ef0b3d465f7c7f9df2d542ada35a979e138aa3876c35e050f1637a143e93"}, - {"path": "lib/slang-standard-module-2026.16/slang/permuto-encoder.slang", "size": 14699, "sha256": "e26ce720e984d906b8475dc32eb3dac45ee377ea39591a40044ab311d77302b1"}, - {"path": "lib/slang-standard-module-2026.16/slang/shared-memory-pool.slang", "size": 21226, "sha256": "5e723beac8f33532c40bf67e701412764b16fd656d92040c0da45ba6b07f4a5d"}, - {"path": "lib/slang-standard-module-2026.16/slang/vectorized-reader.slang", "size": 9850, "sha256": "ed75edc8f84a593dee13c1c54fbff023382b7f102dde3046b9917e08ae630daa"} + {"path": "lib/libgfx.so.0.2026.19", "size": 972056, "sha256": "d574040e52109bb9ac841f1c287006e0220ed354067487ba7bc76df1ff56b12d"}, + {"path": "lib/libslang-compiler.so.0.2026.19", "size": 29572896, "sha256": "881e86de4bae87a3b4f2a0758cfc6c648112d54d67e49b1b4a3b434ca8845fa6"}, + {"path": "lib/libslang-glsl-module-2026.19.so", "size": 1294864, "sha256": "e56ea46b27c57086f44616df80c9f10e0f613c747a364011fe190871f3763659"}, + {"path": "lib/libslang-glslang-2026.19.so", "size": 9596968, "sha256": "c23216cec39b22eac4d8e0b31b6a31548cf3b506b445a58398b9b1ccc31e37c3"}, + {"path": "lib/libslang-rt.so.0.2026.19", "size": 304696, "sha256": "4bf4391ef7904fc3b21163a547596277a7b483524a1390016f3d5abb75a584d6"}, + {"path": "lib/slang-standard-module-2026.19/experimental/workgraph.slang", "size": 8900, "sha256": "4ccb32d0cc2a4d735ae2da16ef6908d24d0a991753e8593ff01ef433e3aab078"}, + {"path": "lib/slang-standard-module-2026.19/experimental/workgraph.slang-module", "size": 101940, "sha256": "1e9b166182893494f74c9af4ba61b8fdc8c9d873a4c754521fcbd4214b35c28b"}, + {"path": "lib/slang-standard-module-2026.19/slang/WaveMatrix.slang", "size": 36043, "sha256": "7c54344d6f5a0570d6417888296753e6b341e041ca4a6a39335e14af87ffd27e"}, + {"path": "lib/slang-standard-module-2026.19/slang/accelerate-vector-coopmat.slang", "size": 11581, "sha256": "fa3261f635f146ac70fb5dec91a1408121f03798c42ee7d343574bf2b654f06d"}, + {"path": "lib/slang-standard-module-2026.19/slang/activations.slang", "size": 5316, "sha256": "b3f34b0fa1d20a1e7e37a30234b2af5e0ef8bf0ace410592dda205ac9c67fb67"}, + {"path": "lib/slang-standard-module-2026.19/slang/bindless-storage.slang", "size": 16896, "sha256": "d55135354347cd2333caa2346ef79527a9bc8dfd0db9313463e44c53246a3337"}, + {"path": "lib/slang-standard-module-2026.19/slang/functional.slang-module", "size": 73156, "sha256": "d10d1a4b449b5d740a0ef5701e978844de66cd66b1d54de5b841fceb52e495e6"}, + {"path": "lib/slang-standard-module-2026.19/slang/hash-function.slang", "size": 3610, "sha256": "f730f5bb868d8f8805ae9ce6420599b4c43cec17decfedda001705cab3107bc1"}, + {"path": "lib/slang-standard-module-2026.19/slang/iactivation.slang", "size": 1012, "sha256": "5ae0684a7f6d796eceb16d9dd91c6f391ce462b0ae5a88b4b64c8e03939b60cd"}, + {"path": "lib/slang-standard-module-2026.19/slang/iencoder.slang", "size": 902, "sha256": "2177cea7d3da4e4577ee840989fa2a7502939ef14bd57ceed4e6dc870ce3d005"}, + {"path": "lib/slang-standard-module-2026.19/slang/ilayer.slang", "size": 966, "sha256": "3e47ef65ea31f6cff857d8c3158755e679d206058433cd635ec55de87fdbc3fa"}, + {"path": "lib/slang-standard-module-2026.19/slang/inline-vector.slang", "size": 6794, "sha256": "50c9d0726c6e8ea93b2d43c46628b8ca30e3ab02b79942d132040859af214600"}, + {"path": "lib/slang-standard-module-2026.19/slang/istorages.slang", "size": 4048, "sha256": "d1818c0eef09cce3e677d591b7a2e1b09b8770bcf960f97b78f6a29b7c19d2cb"}, + {"path": "lib/slang-standard-module-2026.19/slang/ivector.slang", "size": 4291, "sha256": "1c44acd25cd5ad63756494ef6066865f6e7eef38f486f86beb2fdad2d59e79b3"}, + {"path": "lib/slang-standard-module-2026.19/slang/layers.slang", "size": 3939, "sha256": "0fce3dc9f13022516addc2df9d8dc1751962f9b2207533206e175449ca3a0e00"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-linear-layout-help.slang", "size": 57393, "sha256": "2d29e94392b54d3605c741c9d04bc7bf3cef181afd39a7d6d398a77033f6089e"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-cuda.slang", "size": 21835, "sha256": "0d8de6257095a8bc498b48e2ed2a6be7ddae1b692dd40a347ace2610a8a50cb4"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-layout-helper.slang", "size": 5511, "sha256": "4c82a16fd615b2284fa45bc4ae2163a4346b0ce474315541632c98d999dce3a3"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-metal.slang", "size": 28953, "sha256": "180cbf0b52cb01479e2ec197f5340ac7c5814a18299203aa6c8fa38ec72edb7e"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-vulkan.slang", "size": 17425, "sha256": "345b5b19f8303dd11cfe128e8fe9b1c935c9387af7c85679ed35465c6e366c14"}, + {"path": "lib/slang-standard-module-2026.19/slang/network-parameter-layout-converter.slang", "size": 19874, "sha256": "2ed702f22ab8db77715aebdb5f6ef98068019c8da1d86b08f8b6a8696004598a"}, + {"path": "lib/slang-standard-module-2026.19/slang/neural.slang", "size": 1861, "sha256": "9c13d2c2f46557d704cb0f41c59fd0335243f9dc5692f90b72dfeb6a4db13717"}, + {"path": "lib/slang-standard-module-2026.19/slang/neural.slang-module", "size": 5398204, "sha256": "5e74e7f72a8c968c2e9355f399125267397850f2d49b757e566eddd9705bc0d7"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics.slang-module", "size": 2037148, "sha256": "3b54a0442d4b4dc3bf13193b523249a0f5d18aa8a3aa69ed081f523f92985204"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics/__builtin.slang-module", "size": 538076, "sha256": "95bb828578a860309f52addf0afcb8fd1082638fb8a7d05f9cd85fc2a01f0a78"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics/__builtin_differentiable.slang-module", "size": 4954076, "sha256": "8bf6d949c28756a4d2d15f5ca90cc1da2d770e8c042faae293a8fdffcae1cabc"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics/differentiable.slang-module", "size": 18805748, "sha256": "af3abed8ea75024451c5eb9f142c3b321d28bd1ce3b9ecb9895c6724f968f80d"}, + {"path": "lib/slang-standard-module-2026.19/slang/permuto-encoder.slang", "size": 14699, "sha256": "e26ce720e984d906b8475dc32eb3dac45ee377ea39591a40044ab311d77302b1"}, + {"path": "lib/slang-standard-module-2026.19/slang/shared-memory-pool.slang", "size": 21226, "sha256": "5e723beac8f33532c40bf67e701412764b16fd656d92040c0da45ba6b07f4a5d"}, + {"path": "lib/slang-standard-module-2026.19/slang/vectorized-reader.slang", "size": 9850, "sha256": "ed75edc8f84a593dee13c1c54fbff023382b7f102dde3046b9917e08ae630daa"} ], "symlinks": [ - {"path": "lib/libgfx.so", "target": "libgfx.so.0.2026.16"}, - {"path": "lib/libslang-compiler.so", "target": "libslang-compiler.so.0.2026.16"}, - {"path": "lib/libslang-rt.so", "target": "libslang-rt.so.0.2026.16"}, - {"path": "lib/libslang.so", "target": "libslang-compiler.so.0.2026.16"} + {"path": "lib/libgfx.so", "target": "libgfx.so.0.2026.19"}, + {"path": "lib/libslang-compiler.so", "target": "libslang-compiler.so.0.2026.19"}, + {"path": "lib/libslang-rt.so", "target": "libslang-rt.so.0.2026.19"}, + {"path": "lib/libslang.so", "target": "libslang-compiler.so.0.2026.19"} ] } diff --git a/natives/manifests/linux-x86_64.json b/natives/manifests/linux-x86_64.json index 606846f..f56872e 100644 --- a/natives/manifests/linux-x86_64.json +++ b/natives/manifests/linux-x86_64.json @@ -1,45 +1,50 @@ { - "slangVersion": "2026.16", + "slangVersion": "2026.19", "platform": "linux-x86_64", - "asset": "slang-2026.16-linux-x86_64.zip", - "url": "https://github.com/shader-slang/slang/releases/download/v2026.16/slang-2026.16-linux-x86_64.zip", - "sha256": "f384d68d4e6f907272f8a321a75062ae0d0b64de9e459760e4e06b364eb7cd53", + "asset": "slang-2026.19-linux-x86_64.zip", + "url": "https://github.com/shader-slang/slang/releases/download/v2026.19/slang-2026.19-linux-x86_64.zip", + "sha256": "758446aa36dd9dc985b6a93e79fff9ed7fc139180c89cb5d3f09427be5d0d2b7", "files": [ - {"path": "lib/libgfx.so.0.2026.16", "size": 1068840, "sha256": "46d0e8a746ce3e68595ede25189b78de9864b78308cc7376e30bd21da27585c9"}, - {"path": "lib/libslang-compiler.so.0.2026.16", "size": 30636312, "sha256": "40536ae7c1c169246f2e426f9eb7879f9b144c6a00df730e3e3aa047b48a4614"}, - {"path": "lib/libslang-glsl-module-2026.16.so", "size": 1334808, "sha256": "3521b35527ac7ca6ba890dc0643e5c373d9f0ad46adfeb949259ff8cd9a24461"}, - {"path": "lib/libslang-glslang-2026.16.so", "size": 10055776, "sha256": "9627577f16dc3c77d2917847aa3c9aa810bd64dd9526e749a7286375f955c33e"}, - {"path": "lib/libslang-rt.so.0.2026.16", "size": 320288, "sha256": "f9ea8f8b551d26970e9c38a9b03ad999e9c114d9ed4670a7d41d7fe0bcd7a7a7"}, - {"path": "lib/slang-standard-module-2026.16/experimental/workgraph.slang", "size": 8900, "sha256": "4ccb32d0cc2a4d735ae2da16ef6908d24d0a991753e8593ff01ef433e3aab078"}, - {"path": "lib/slang-standard-module-2026.16/experimental/workgraph.slang-module", "size": 111548, "sha256": "c0e27fbbe3aada94477925d5debcd76b3ccd8bb818c054a698c0dcc2feb13187"}, - {"path": "lib/slang-standard-module-2026.16/slang/WaveMatrix.slang", "size": 36043, "sha256": "7c54344d6f5a0570d6417888296753e6b341e041ca4a6a39335e14af87ffd27e"}, - {"path": "lib/slang-standard-module-2026.16/slang/accelerate-vector-coopmat.slang", "size": 11581, "sha256": "fa3261f635f146ac70fb5dec91a1408121f03798c42ee7d343574bf2b654f06d"}, - {"path": "lib/slang-standard-module-2026.16/slang/activations.slang", "size": 5316, "sha256": "b3f34b0fa1d20a1e7e37a30234b2af5e0ef8bf0ace410592dda205ac9c67fb67"}, - {"path": "lib/slang-standard-module-2026.16/slang/bindless-storage.slang", "size": 16896, "sha256": "d55135354347cd2333caa2346ef79527a9bc8dfd0db9313463e44c53246a3337"}, - {"path": "lib/slang-standard-module-2026.16/slang/hash-function.slang", "size": 3610, "sha256": "f730f5bb868d8f8805ae9ce6420599b4c43cec17decfedda001705cab3107bc1"}, - {"path": "lib/slang-standard-module-2026.16/slang/iactivation.slang", "size": 1012, "sha256": "5ae0684a7f6d796eceb16d9dd91c6f391ce462b0ae5a88b4b64c8e03939b60cd"}, - {"path": "lib/slang-standard-module-2026.16/slang/iencoder.slang", "size": 902, "sha256": "2177cea7d3da4e4577ee840989fa2a7502939ef14bd57ceed4e6dc870ce3d005"}, - {"path": "lib/slang-standard-module-2026.16/slang/ilayer.slang", "size": 966, "sha256": "3e47ef65ea31f6cff857d8c3158755e679d206058433cd635ec55de87fdbc3fa"}, - {"path": "lib/slang-standard-module-2026.16/slang/inline-vector.slang", "size": 6794, "sha256": "50c9d0726c6e8ea93b2d43c46628b8ca30e3ab02b79942d132040859af214600"}, - {"path": "lib/slang-standard-module-2026.16/slang/istorages.slang", "size": 4048, "sha256": "d1818c0eef09cce3e677d591b7a2e1b09b8770bcf960f97b78f6a29b7c19d2cb"}, - {"path": "lib/slang-standard-module-2026.16/slang/ivector.slang", "size": 4291, "sha256": "1c44acd25cd5ad63756494ef6066865f6e7eef38f486f86beb2fdad2d59e79b3"}, - {"path": "lib/slang-standard-module-2026.16/slang/layers.slang", "size": 3939, "sha256": "0fce3dc9f13022516addc2df9d8dc1751962f9b2207533206e175449ca3a0e00"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-linear-layout-help.slang", "size": 57393, "sha256": "2d29e94392b54d3605c741c9d04bc7bf3cef181afd39a7d6d398a77033f6089e"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-cuda.slang", "size": 21835, "sha256": "0d8de6257095a8bc498b48e2ed2a6be7ddae1b692dd40a347ace2610a8a50cb4"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-layout-helper.slang", "size": 5511, "sha256": "4c82a16fd615b2284fa45bc4ae2163a4346b0ce474315541632c98d999dce3a3"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-metal.slang", "size": 28953, "sha256": "180cbf0b52cb01479e2ec197f5340ac7c5814a18299203aa6c8fa38ec72edb7e"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-vulkan.slang", "size": 17425, "sha256": "345b5b19f8303dd11cfe128e8fe9b1c935c9387af7c85679ed35465c6e366c14"}, - {"path": "lib/slang-standard-module-2026.16/slang/network-parameter-layout-converter.slang", "size": 19874, "sha256": "2ed702f22ab8db77715aebdb5f6ef98068019c8da1d86b08f8b6a8696004598a"}, - {"path": "lib/slang-standard-module-2026.16/slang/neural.slang", "size": 1861, "sha256": "9c13d2c2f46557d704cb0f41c59fd0335243f9dc5692f90b72dfeb6a4db13717"}, - {"path": "lib/slang-standard-module-2026.16/slang/neural.slang-module", "size": 5508796, "sha256": "3731d0b144a90f661da3cd1993f624cebbcd7ef0f4ed919efd92247ba5a3e1d1"}, - {"path": "lib/slang-standard-module-2026.16/slang/permuto-encoder.slang", "size": 14699, "sha256": "e26ce720e984d906b8475dc32eb3dac45ee377ea39591a40044ab311d77302b1"}, - {"path": "lib/slang-standard-module-2026.16/slang/shared-memory-pool.slang", "size": 21226, "sha256": "5e723beac8f33532c40bf67e701412764b16fd656d92040c0da45ba6b07f4a5d"}, - {"path": "lib/slang-standard-module-2026.16/slang/vectorized-reader.slang", "size": 9850, "sha256": "ed75edc8f84a593dee13c1c54fbff023382b7f102dde3046b9917e08ae630daa"} + {"path": "lib/libgfx.so.0.2026.19", "size": 1068840, "sha256": "44110c0b7a398d552041f9c791300c3e37f63ffc8bd1450a018469c77e163945"}, + {"path": "lib/libslang-compiler.so.0.2026.19", "size": 31399120, "sha256": "362b766c60b1819711ae770b193fb580d7422da31f99577ad94ea1b504c16602"}, + {"path": "lib/libslang-glsl-module-2026.19.so", "size": 1297944, "sha256": "1ac5d168a504dbb3405f012a8cb359fecb77eaaeb569c42486b49442a31f509b"}, + {"path": "lib/libslang-glslang-2026.19.so", "size": 10125200, "sha256": "e0741ef69f984a8df9eb80437bb8813a65ed585b237cbb43733b79c3c23198ec"}, + {"path": "lib/libslang-rt.so.0.2026.19", "size": 320288, "sha256": "fa5d73a35b12a42e75f757f778bdc17ecc26c6dfe121a7efffd1c9f4bc3881cf"}, + {"path": "lib/slang-standard-module-2026.19/experimental/workgraph.slang", "size": 8900, "sha256": "4ccb32d0cc2a4d735ae2da16ef6908d24d0a991753e8593ff01ef433e3aab078"}, + {"path": "lib/slang-standard-module-2026.19/experimental/workgraph.slang-module", "size": 101940, "sha256": "1e9b166182893494f74c9af4ba61b8fdc8c9d873a4c754521fcbd4214b35c28b"}, + {"path": "lib/slang-standard-module-2026.19/slang/WaveMatrix.slang", "size": 36043, "sha256": "7c54344d6f5a0570d6417888296753e6b341e041ca4a6a39335e14af87ffd27e"}, + {"path": "lib/slang-standard-module-2026.19/slang/accelerate-vector-coopmat.slang", "size": 11581, "sha256": "fa3261f635f146ac70fb5dec91a1408121f03798c42ee7d343574bf2b654f06d"}, + {"path": "lib/slang-standard-module-2026.19/slang/activations.slang", "size": 5316, "sha256": "b3f34b0fa1d20a1e7e37a30234b2af5e0ef8bf0ace410592dda205ac9c67fb67"}, + {"path": "lib/slang-standard-module-2026.19/slang/bindless-storage.slang", "size": 16896, "sha256": "d55135354347cd2333caa2346ef79527a9bc8dfd0db9313463e44c53246a3337"}, + {"path": "lib/slang-standard-module-2026.19/slang/functional.slang-module", "size": 73156, "sha256": "25664df8d57e59c3c67b25fc74dc3f35e4f639692219568be18b4a52dcb646ef"}, + {"path": "lib/slang-standard-module-2026.19/slang/hash-function.slang", "size": 3610, "sha256": "f730f5bb868d8f8805ae9ce6420599b4c43cec17decfedda001705cab3107bc1"}, + {"path": "lib/slang-standard-module-2026.19/slang/iactivation.slang", "size": 1012, "sha256": "5ae0684a7f6d796eceb16d9dd91c6f391ce462b0ae5a88b4b64c8e03939b60cd"}, + {"path": "lib/slang-standard-module-2026.19/slang/iencoder.slang", "size": 902, "sha256": "2177cea7d3da4e4577ee840989fa2a7502939ef14bd57ceed4e6dc870ce3d005"}, + {"path": "lib/slang-standard-module-2026.19/slang/ilayer.slang", "size": 966, "sha256": "3e47ef65ea31f6cff857d8c3158755e679d206058433cd635ec55de87fdbc3fa"}, + {"path": "lib/slang-standard-module-2026.19/slang/inline-vector.slang", "size": 6794, "sha256": "50c9d0726c6e8ea93b2d43c46628b8ca30e3ab02b79942d132040859af214600"}, + {"path": "lib/slang-standard-module-2026.19/slang/istorages.slang", "size": 4048, "sha256": "d1818c0eef09cce3e677d591b7a2e1b09b8770bcf960f97b78f6a29b7c19d2cb"}, + {"path": "lib/slang-standard-module-2026.19/slang/ivector.slang", "size": 4291, "sha256": "1c44acd25cd5ad63756494ef6066865f6e7eef38f486f86beb2fdad2d59e79b3"}, + {"path": "lib/slang-standard-module-2026.19/slang/layers.slang", "size": 3939, "sha256": "0fce3dc9f13022516addc2df9d8dc1751962f9b2207533206e175449ca3a0e00"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-linear-layout-help.slang", "size": 57393, "sha256": "2d29e94392b54d3605c741c9d04bc7bf3cef181afd39a7d6d398a77033f6089e"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-cuda.slang", "size": 21835, "sha256": "0d8de6257095a8bc498b48e2ed2a6be7ddae1b692dd40a347ace2610a8a50cb4"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-layout-helper.slang", "size": 5511, "sha256": "4c82a16fd615b2284fa45bc4ae2163a4346b0ce474315541632c98d999dce3a3"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-metal.slang", "size": 28953, "sha256": "180cbf0b52cb01479e2ec197f5340ac7c5814a18299203aa6c8fa38ec72edb7e"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-vulkan.slang", "size": 17425, "sha256": "345b5b19f8303dd11cfe128e8fe9b1c935c9387af7c85679ed35465c6e366c14"}, + {"path": "lib/slang-standard-module-2026.19/slang/network-parameter-layout-converter.slang", "size": 19874, "sha256": "2ed702f22ab8db77715aebdb5f6ef98068019c8da1d86b08f8b6a8696004598a"}, + {"path": "lib/slang-standard-module-2026.19/slang/neural.slang", "size": 1861, "sha256": "9c13d2c2f46557d704cb0f41c59fd0335243f9dc5692f90b72dfeb6a4db13717"}, + {"path": "lib/slang-standard-module-2026.19/slang/neural.slang-module", "size": 5398204, "sha256": "55e57eff6ee8d047b28485eb4d9889951268f35017ff5f583f5e6a2d5ea564a4"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics.slang-module", "size": 2037148, "sha256": "8f6fd50ff9582301a0cb890a306a9279927d5550c408ab48e614d2ab69ff315b"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics/__builtin.slang-module", "size": 538076, "sha256": "6c749f82334e42c612cdd7a04c56c75e317ff6d42a5c5c2d203722c97f244dfa"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics/__builtin_differentiable.slang-module", "size": 4954076, "sha256": "8bf6d949c28756a4d2d15f5ca90cc1da2d770e8c042faae293a8fdffcae1cabc"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics/differentiable.slang-module", "size": 18805748, "sha256": "23912f160e0aa5a3554fc4cd3e7995960d779a09d6d1b5be27ea4b04f993a70e"}, + {"path": "lib/slang-standard-module-2026.19/slang/permuto-encoder.slang", "size": 14699, "sha256": "e26ce720e984d906b8475dc32eb3dac45ee377ea39591a40044ab311d77302b1"}, + {"path": "lib/slang-standard-module-2026.19/slang/shared-memory-pool.slang", "size": 21226, "sha256": "5e723beac8f33532c40bf67e701412764b16fd656d92040c0da45ba6b07f4a5d"}, + {"path": "lib/slang-standard-module-2026.19/slang/vectorized-reader.slang", "size": 9850, "sha256": "ed75edc8f84a593dee13c1c54fbff023382b7f102dde3046b9917e08ae630daa"} ], "symlinks": [ - {"path": "lib/libgfx.so", "target": "libgfx.so.0.2026.16"}, - {"path": "lib/libslang-compiler.so", "target": "libslang-compiler.so.0.2026.16"}, - {"path": "lib/libslang-rt.so", "target": "libslang-rt.so.0.2026.16"}, - {"path": "lib/libslang.so", "target": "libslang-compiler.so.0.2026.16"} + {"path": "lib/libgfx.so", "target": "libgfx.so.0.2026.19"}, + {"path": "lib/libslang-compiler.so", "target": "libslang-compiler.so.0.2026.19"}, + {"path": "lib/libslang-rt.so", "target": "libslang-rt.so.0.2026.19"}, + {"path": "lib/libslang.so", "target": "libslang-compiler.so.0.2026.19"} ] } diff --git a/natives/manifests/macos-aarch64.json b/natives/manifests/macos-aarch64.json index f0035d5..4b54faf 100644 --- a/natives/manifests/macos-aarch64.json +++ b/natives/manifests/macos-aarch64.json @@ -1,45 +1,50 @@ { - "slangVersion": "2026.16", + "slangVersion": "2026.19", "platform": "macos-aarch64", - "asset": "slang-2026.16-macos-aarch64.zip", - "url": "https://github.com/shader-slang/slang/releases/download/v2026.16/slang-2026.16-macos-aarch64.zip", - "sha256": "a3de85e453e5d9794b8438f6e512661109d65b75d60c749870ec46da324536e7", + "asset": "slang-2026.19-macos-aarch64.zip", + "url": "https://github.com/shader-slang/slang/releases/download/v2026.19/slang-2026.19-macos-aarch64.zip", + "sha256": "f77d89b91ec63698a7a8e5aa4316ce08b70d3211a236640ee4551f55be85d9ed", "files": [ - {"path": "lib/libgfx.0.2026.16.dylib", "size": 1194128, "sha256": "9869e43f36e870eff4585c4ee76f824e3714d5e833f63c2ed8f59abff3299784"}, - {"path": "lib/libslang-compiler.0.2026.16.dylib", "size": 29364112, "sha256": "ef20598c247dc673efafb42d5648326d894da2e8b18fc955d5485dd5a4c1efbe"}, - {"path": "lib/libslang-glsl-module-2026.16.dylib", "size": 1384272, "sha256": "4595c8170c88e087bb5099e5fde6fb75b46c61b10c3b6f5432433b91a85e69c9"}, - {"path": "lib/libslang-glslang-2026.16.dylib", "size": 8527552, "sha256": "77fcbeeb36811a81b60401547284c8c82198e27b307cf0e47112e6ccf91685d2"}, - {"path": "lib/libslang-rt.0.2026.16.dylib", "size": 265872, "sha256": "b03be2a0f7929c30840ae8c041ba6f380ea7cb5fc728261ab14526ebb21a5a66"}, - {"path": "lib/slang-standard-module-2026.16/experimental/workgraph.slang", "size": 8900, "sha256": "4ccb32d0cc2a4d735ae2da16ef6908d24d0a991753e8593ff01ef433e3aab078"}, - {"path": "lib/slang-standard-module-2026.16/experimental/workgraph.slang-module", "size": 111548, "sha256": "c1ee63d5bc258c287938f5c731e22e4a4f1fbad17d795f12e9ba3ae251659bc5"}, - {"path": "lib/slang-standard-module-2026.16/slang/WaveMatrix.slang", "size": 36043, "sha256": "7c54344d6f5a0570d6417888296753e6b341e041ca4a6a39335e14af87ffd27e"}, - {"path": "lib/slang-standard-module-2026.16/slang/accelerate-vector-coopmat.slang", "size": 11581, "sha256": "fa3261f635f146ac70fb5dec91a1408121f03798c42ee7d343574bf2b654f06d"}, - {"path": "lib/slang-standard-module-2026.16/slang/activations.slang", "size": 5316, "sha256": "b3f34b0fa1d20a1e7e37a30234b2af5e0ef8bf0ace410592dda205ac9c67fb67"}, - {"path": "lib/slang-standard-module-2026.16/slang/bindless-storage.slang", "size": 16896, "sha256": "d55135354347cd2333caa2346ef79527a9bc8dfd0db9313463e44c53246a3337"}, - {"path": "lib/slang-standard-module-2026.16/slang/hash-function.slang", "size": 3610, "sha256": "f730f5bb868d8f8805ae9ce6420599b4c43cec17decfedda001705cab3107bc1"}, - {"path": "lib/slang-standard-module-2026.16/slang/iactivation.slang", "size": 1012, "sha256": "5ae0684a7f6d796eceb16d9dd91c6f391ce462b0ae5a88b4b64c8e03939b60cd"}, - {"path": "lib/slang-standard-module-2026.16/slang/iencoder.slang", "size": 902, "sha256": "2177cea7d3da4e4577ee840989fa2a7502939ef14bd57ceed4e6dc870ce3d005"}, - {"path": "lib/slang-standard-module-2026.16/slang/ilayer.slang", "size": 966, "sha256": "3e47ef65ea31f6cff857d8c3158755e679d206058433cd635ec55de87fdbc3fa"}, - {"path": "lib/slang-standard-module-2026.16/slang/inline-vector.slang", "size": 6794, "sha256": "50c9d0726c6e8ea93b2d43c46628b8ca30e3ab02b79942d132040859af214600"}, - {"path": "lib/slang-standard-module-2026.16/slang/istorages.slang", "size": 4048, "sha256": "d1818c0eef09cce3e677d591b7a2e1b09b8770bcf960f97b78f6a29b7c19d2cb"}, - {"path": "lib/slang-standard-module-2026.16/slang/ivector.slang", "size": 4291, "sha256": "1c44acd25cd5ad63756494ef6066865f6e7eef38f486f86beb2fdad2d59e79b3"}, - {"path": "lib/slang-standard-module-2026.16/slang/layers.slang", "size": 3939, "sha256": "0fce3dc9f13022516addc2df9d8dc1751962f9b2207533206e175449ca3a0e00"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-linear-layout-help.slang", "size": 57393, "sha256": "2d29e94392b54d3605c741c9d04bc7bf3cef181afd39a7d6d398a77033f6089e"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-cuda.slang", "size": 21835, "sha256": "0d8de6257095a8bc498b48e2ed2a6be7ddae1b692dd40a347ace2610a8a50cb4"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-layout-helper.slang", "size": 5511, "sha256": "4c82a16fd615b2284fa45bc4ae2163a4346b0ce474315541632c98d999dce3a3"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-metal.slang", "size": 28953, "sha256": "180cbf0b52cb01479e2ec197f5340ac7c5814a18299203aa6c8fa38ec72edb7e"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-vulkan.slang", "size": 17425, "sha256": "345b5b19f8303dd11cfe128e8fe9b1c935c9387af7c85679ed35465c6e366c14"}, - {"path": "lib/slang-standard-module-2026.16/slang/network-parameter-layout-converter.slang", "size": 19874, "sha256": "2ed702f22ab8db77715aebdb5f6ef98068019c8da1d86b08f8b6a8696004598a"}, - {"path": "lib/slang-standard-module-2026.16/slang/neural.slang", "size": 1861, "sha256": "9c13d2c2f46557d704cb0f41c59fd0335243f9dc5692f90b72dfeb6a4db13717"}, - {"path": "lib/slang-standard-module-2026.16/slang/neural.slang-module", "size": 5508796, "sha256": "0f7fab960dab01c032774d54b872e17e6f739ed3273ce8209aedd60a049f1469"}, - {"path": "lib/slang-standard-module-2026.16/slang/permuto-encoder.slang", "size": 14699, "sha256": "e26ce720e984d906b8475dc32eb3dac45ee377ea39591a40044ab311d77302b1"}, - {"path": "lib/slang-standard-module-2026.16/slang/shared-memory-pool.slang", "size": 21226, "sha256": "5e723beac8f33532c40bf67e701412764b16fd656d92040c0da45ba6b07f4a5d"}, - {"path": "lib/slang-standard-module-2026.16/slang/vectorized-reader.slang", "size": 9850, "sha256": "ed75edc8f84a593dee13c1c54fbff023382b7f102dde3046b9917e08ae630daa"} + {"path": "lib/libgfx.0.2026.19.dylib", "size": 1194128, "sha256": "2a00c2da81593c47f36c7a450e066f6bd0ab6ca4d855ce709afdc3a1b60dabdd"}, + {"path": "lib/libslang-compiler.0.2026.19.dylib", "size": 30074624, "sha256": "4647f4bfa92233fc3aa65d855bb6ec8b454bb57e64b3f8c6c60349cc139b0f48"}, + {"path": "lib/libslang-glsl-module-2026.19.dylib", "size": 1335024, "sha256": "b1b0b54055b5ac5f49972fc8eabbeedaaa8ee6459e4453d64cbab39cc5693f7b"}, + {"path": "lib/libslang-glslang-2026.19.dylib", "size": 7827120, "sha256": "f8bf5f42b89d2dfd56a0d77738057b0b2a988306b2577b7d08118c89299ad9e1"}, + {"path": "lib/libslang-rt.0.2026.19.dylib", "size": 265872, "sha256": "b865febe1bfd87f713e6ccfd3a049360673ba56d64ab2768ca4b687f8399ac80"}, + {"path": "lib/slang-standard-module-2026.19/experimental/workgraph.slang", "size": 8900, "sha256": "4ccb32d0cc2a4d735ae2da16ef6908d24d0a991753e8593ff01ef433e3aab078"}, + {"path": "lib/slang-standard-module-2026.19/experimental/workgraph.slang-module", "size": 101940, "sha256": "80bd3784625598a8856fd69181782ec029d70909d13829e31ec2d627eb739e68"}, + {"path": "lib/slang-standard-module-2026.19/slang/WaveMatrix.slang", "size": 36043, "sha256": "7c54344d6f5a0570d6417888296753e6b341e041ca4a6a39335e14af87ffd27e"}, + {"path": "lib/slang-standard-module-2026.19/slang/accelerate-vector-coopmat.slang", "size": 11581, "sha256": "fa3261f635f146ac70fb5dec91a1408121f03798c42ee7d343574bf2b654f06d"}, + {"path": "lib/slang-standard-module-2026.19/slang/activations.slang", "size": 5316, "sha256": "b3f34b0fa1d20a1e7e37a30234b2af5e0ef8bf0ace410592dda205ac9c67fb67"}, + {"path": "lib/slang-standard-module-2026.19/slang/bindless-storage.slang", "size": 16896, "sha256": "d55135354347cd2333caa2346ef79527a9bc8dfd0db9313463e44c53246a3337"}, + {"path": "lib/slang-standard-module-2026.19/slang/functional.slang-module", "size": 73156, "sha256": "62aa66d317055a9978c1a1a516fb483332d9a973b8d51fe9e35959541ed6dbc0"}, + {"path": "lib/slang-standard-module-2026.19/slang/hash-function.slang", "size": 3610, "sha256": "f730f5bb868d8f8805ae9ce6420599b4c43cec17decfedda001705cab3107bc1"}, + {"path": "lib/slang-standard-module-2026.19/slang/iactivation.slang", "size": 1012, "sha256": "5ae0684a7f6d796eceb16d9dd91c6f391ce462b0ae5a88b4b64c8e03939b60cd"}, + {"path": "lib/slang-standard-module-2026.19/slang/iencoder.slang", "size": 902, "sha256": "2177cea7d3da4e4577ee840989fa2a7502939ef14bd57ceed4e6dc870ce3d005"}, + {"path": "lib/slang-standard-module-2026.19/slang/ilayer.slang", "size": 966, "sha256": "3e47ef65ea31f6cff857d8c3158755e679d206058433cd635ec55de87fdbc3fa"}, + {"path": "lib/slang-standard-module-2026.19/slang/inline-vector.slang", "size": 6794, "sha256": "50c9d0726c6e8ea93b2d43c46628b8ca30e3ab02b79942d132040859af214600"}, + {"path": "lib/slang-standard-module-2026.19/slang/istorages.slang", "size": 4048, "sha256": "d1818c0eef09cce3e677d591b7a2e1b09b8770bcf960f97b78f6a29b7c19d2cb"}, + {"path": "lib/slang-standard-module-2026.19/slang/ivector.slang", "size": 4291, "sha256": "1c44acd25cd5ad63756494ef6066865f6e7eef38f486f86beb2fdad2d59e79b3"}, + {"path": "lib/slang-standard-module-2026.19/slang/layers.slang", "size": 3939, "sha256": "0fce3dc9f13022516addc2df9d8dc1751962f9b2207533206e175449ca3a0e00"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-linear-layout-help.slang", "size": 57393, "sha256": "2d29e94392b54d3605c741c9d04bc7bf3cef181afd39a7d6d398a77033f6089e"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-cuda.slang", "size": 21835, "sha256": "0d8de6257095a8bc498b48e2ed2a6be7ddae1b692dd40a347ace2610a8a50cb4"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-layout-helper.slang", "size": 5511, "sha256": "4c82a16fd615b2284fa45bc4ae2163a4346b0ce474315541632c98d999dce3a3"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-metal.slang", "size": 28953, "sha256": "180cbf0b52cb01479e2ec197f5340ac7c5814a18299203aa6c8fa38ec72edb7e"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-vulkan.slang", "size": 17425, "sha256": "345b5b19f8303dd11cfe128e8fe9b1c935c9387af7c85679ed35465c6e366c14"}, + {"path": "lib/slang-standard-module-2026.19/slang/network-parameter-layout-converter.slang", "size": 19874, "sha256": "2ed702f22ab8db77715aebdb5f6ef98068019c8da1d86b08f8b6a8696004598a"}, + {"path": "lib/slang-standard-module-2026.19/slang/neural.slang", "size": 1861, "sha256": "9c13d2c2f46557d704cb0f41c59fd0335243f9dc5692f90b72dfeb6a4db13717"}, + {"path": "lib/slang-standard-module-2026.19/slang/neural.slang-module", "size": 5398204, "sha256": "4abf1833afb6059b4a3a82ee89c9739c0e9e346a37ba67d382789c0bff46290f"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics.slang-module", "size": 2037148, "sha256": "45c1a89cfc31b64446aded1dec696039f716741f4a6da8bf39f8337000edb1df"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics/__builtin.slang-module", "size": 538076, "sha256": "3c1d660efbe6c7ffc638be61009dd21a3f2890e8acdfa7b2488f35b1262f4e2c"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics/__builtin_differentiable.slang-module", "size": 4954076, "sha256": "3941d4ebb45e8d732ad4712686d4080662a7ce7866cc2b177ee5d1f9510071eb"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics/differentiable.slang-module", "size": 18805748, "sha256": "97532e5e9d30cde633966f974fd619d4fa25c51ef1da73f5981c91f12ceb1fc5"}, + {"path": "lib/slang-standard-module-2026.19/slang/permuto-encoder.slang", "size": 14699, "sha256": "e26ce720e984d906b8475dc32eb3dac45ee377ea39591a40044ab311d77302b1"}, + {"path": "lib/slang-standard-module-2026.19/slang/shared-memory-pool.slang", "size": 21226, "sha256": "5e723beac8f33532c40bf67e701412764b16fd656d92040c0da45ba6b07f4a5d"}, + {"path": "lib/slang-standard-module-2026.19/slang/vectorized-reader.slang", "size": 9850, "sha256": "ed75edc8f84a593dee13c1c54fbff023382b7f102dde3046b9917e08ae630daa"} ], "symlinks": [ - {"path": "lib/libgfx.dylib", "target": "libgfx.0.2026.16.dylib"}, - {"path": "lib/libslang-compiler.dylib", "target": "libslang-compiler.0.2026.16.dylib"}, - {"path": "lib/libslang-rt.dylib", "target": "libslang-rt.0.2026.16.dylib"}, - {"path": "lib/libslang.dylib", "target": "libslang-compiler.0.2026.16.dylib"} + {"path": "lib/libgfx.dylib", "target": "libgfx.0.2026.19.dylib"}, + {"path": "lib/libslang-compiler.dylib", "target": "libslang-compiler.0.2026.19.dylib"}, + {"path": "lib/libslang-rt.dylib", "target": "libslang-rt.0.2026.19.dylib"}, + {"path": "lib/libslang.dylib", "target": "libslang-compiler.0.2026.19.dylib"} ] } diff --git a/natives/manifests/macos-x86_64.json b/natives/manifests/macos-x86_64.json index a8aa56f..b0e3827 100644 --- a/natives/manifests/macos-x86_64.json +++ b/natives/manifests/macos-x86_64.json @@ -1,45 +1,50 @@ { - "slangVersion": "2026.16", + "slangVersion": "2026.19", "platform": "macos-x86_64", - "asset": "slang-2026.16-macos-x86_64.zip", - "url": "https://github.com/shader-slang/slang/releases/download/v2026.16/slang-2026.16-macos-x86_64.zip", - "sha256": "b1ce1075fb38362598c3e221b48f955f7a8ad70d383983c73c059e0a9fe5e750", + "asset": "slang-2026.19-macos-x86_64.zip", + "url": "https://github.com/shader-slang/slang/releases/download/v2026.19/slang-2026.19-macos-x86_64.zip", + "sha256": "c5e18233c0b90cc651c792ec4c4e4a467a9a101ffb6301643aab89c016b48e42", "files": [ - {"path": "lib/libgfx.0.2026.16.dylib", "size": 1215232, "sha256": "062581a1b4cfa130a1746b8f9bba5a38c38821c3cdc7eebf2cb1a8335340fc6f"}, - {"path": "lib/libslang-compiler.0.2026.16.dylib", "size": 31409376, "sha256": "2e0b3733873022d073ae7b8a7f559c30465a14ca686249d7aae9087fa8960e33"}, - {"path": "lib/libslang-glsl-module-2026.16.dylib", "size": 1354736, "sha256": "92b7ebde735f0c1419460d37d0730e27e07d227eb56c88d9ac391892108db213"}, - {"path": "lib/libslang-glslang-2026.16.dylib", "size": 9254400, "sha256": "2ba397d2374a269ae39e7bbe9ab802b9b5f85eb1017d6c053316fbc5b8ef2a79"}, - {"path": "lib/libslang-rt.0.2026.16.dylib", "size": 241632, "sha256": "2b2cc2167ca7f7d1381f515d2afb98e4c641ab163ba2fda1218b41d2c083e90c"}, - {"path": "lib/slang-standard-module-2026.16/experimental/workgraph.slang", "size": 8900, "sha256": "4ccb32d0cc2a4d735ae2da16ef6908d24d0a991753e8593ff01ef433e3aab078"}, - {"path": "lib/slang-standard-module-2026.16/experimental/workgraph.slang-module", "size": 111548, "sha256": "c1ee63d5bc258c287938f5c731e22e4a4f1fbad17d795f12e9ba3ae251659bc5"}, - {"path": "lib/slang-standard-module-2026.16/slang/WaveMatrix.slang", "size": 36043, "sha256": "7c54344d6f5a0570d6417888296753e6b341e041ca4a6a39335e14af87ffd27e"}, - {"path": "lib/slang-standard-module-2026.16/slang/accelerate-vector-coopmat.slang", "size": 11581, "sha256": "fa3261f635f146ac70fb5dec91a1408121f03798c42ee7d343574bf2b654f06d"}, - {"path": "lib/slang-standard-module-2026.16/slang/activations.slang", "size": 5316, "sha256": "b3f34b0fa1d20a1e7e37a30234b2af5e0ef8bf0ace410592dda205ac9c67fb67"}, - {"path": "lib/slang-standard-module-2026.16/slang/bindless-storage.slang", "size": 16896, "sha256": "d55135354347cd2333caa2346ef79527a9bc8dfd0db9313463e44c53246a3337"}, - {"path": "lib/slang-standard-module-2026.16/slang/hash-function.slang", "size": 3610, "sha256": "f730f5bb868d8f8805ae9ce6420599b4c43cec17decfedda001705cab3107bc1"}, - {"path": "lib/slang-standard-module-2026.16/slang/iactivation.slang", "size": 1012, "sha256": "5ae0684a7f6d796eceb16d9dd91c6f391ce462b0ae5a88b4b64c8e03939b60cd"}, - {"path": "lib/slang-standard-module-2026.16/slang/iencoder.slang", "size": 902, "sha256": "2177cea7d3da4e4577ee840989fa2a7502939ef14bd57ceed4e6dc870ce3d005"}, - {"path": "lib/slang-standard-module-2026.16/slang/ilayer.slang", "size": 966, "sha256": "3e47ef65ea31f6cff857d8c3158755e679d206058433cd635ec55de87fdbc3fa"}, - {"path": "lib/slang-standard-module-2026.16/slang/inline-vector.slang", "size": 6794, "sha256": "50c9d0726c6e8ea93b2d43c46628b8ca30e3ab02b79942d132040859af214600"}, - {"path": "lib/slang-standard-module-2026.16/slang/istorages.slang", "size": 4048, "sha256": "d1818c0eef09cce3e677d591b7a2e1b09b8770bcf960f97b78f6a29b7c19d2cb"}, - {"path": "lib/slang-standard-module-2026.16/slang/ivector.slang", "size": 4291, "sha256": "1c44acd25cd5ad63756494ef6066865f6e7eef38f486f86beb2fdad2d59e79b3"}, - {"path": "lib/slang-standard-module-2026.16/slang/layers.slang", "size": 3939, "sha256": "0fce3dc9f13022516addc2df9d8dc1751962f9b2207533206e175449ca3a0e00"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-linear-layout-help.slang", "size": 57393, "sha256": "2d29e94392b54d3605c741c9d04bc7bf3cef181afd39a7d6d398a77033f6089e"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-cuda.slang", "size": 21835, "sha256": "0d8de6257095a8bc498b48e2ed2a6be7ddae1b692dd40a347ace2610a8a50cb4"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-layout-helper.slang", "size": 5511, "sha256": "4c82a16fd615b2284fa45bc4ae2163a4346b0ce474315541632c98d999dce3a3"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-metal.slang", "size": 28953, "sha256": "180cbf0b52cb01479e2ec197f5340ac7c5814a18299203aa6c8fa38ec72edb7e"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-vulkan.slang", "size": 17425, "sha256": "345b5b19f8303dd11cfe128e8fe9b1c935c9387af7c85679ed35465c6e366c14"}, - {"path": "lib/slang-standard-module-2026.16/slang/network-parameter-layout-converter.slang", "size": 19874, "sha256": "2ed702f22ab8db77715aebdb5f6ef98068019c8da1d86b08f8b6a8696004598a"}, - {"path": "lib/slang-standard-module-2026.16/slang/neural.slang", "size": 1861, "sha256": "9c13d2c2f46557d704cb0f41c59fd0335243f9dc5692f90b72dfeb6a4db13717"}, - {"path": "lib/slang-standard-module-2026.16/slang/neural.slang-module", "size": 5508796, "sha256": "0f7fab960dab01c032774d54b872e17e6f739ed3273ce8209aedd60a049f1469"}, - {"path": "lib/slang-standard-module-2026.16/slang/permuto-encoder.slang", "size": 14699, "sha256": "e26ce720e984d906b8475dc32eb3dac45ee377ea39591a40044ab311d77302b1"}, - {"path": "lib/slang-standard-module-2026.16/slang/shared-memory-pool.slang", "size": 21226, "sha256": "5e723beac8f33532c40bf67e701412764b16fd656d92040c0da45ba6b07f4a5d"}, - {"path": "lib/slang-standard-module-2026.16/slang/vectorized-reader.slang", "size": 9850, "sha256": "ed75edc8f84a593dee13c1c54fbff023382b7f102dde3046b9917e08ae630daa"} + {"path": "lib/libgfx.0.2026.19.dylib", "size": 1215232, "sha256": "c794df593ca675eb722cef3bf8b2ddd5efa1dde54babb69e8965a624ac564343"}, + {"path": "lib/libslang-compiler.0.2026.19.dylib", "size": 32164176, "sha256": "66aa31f906281d8531fe037daf65efe3d2ec1aa0a966c0ea161ab381e2c7636a"}, + {"path": "lib/libslang-glsl-module-2026.19.dylib", "size": 1317584, "sha256": "e08ee56f58d62fbc2bd18e0593541b7585c7bb762e37dab04bcccb51130321f0"}, + {"path": "lib/libslang-glslang-2026.19.dylib", "size": 8460080, "sha256": "27d91edaa977fa4262f2bc7857014e5490525ef362bb022554101101c8b85b6a"}, + {"path": "lib/libslang-rt.0.2026.19.dylib", "size": 241632, "sha256": "025e663fb757742b4b7ff0782aada613c3e6bf3545c37908626beeffd936423e"}, + {"path": "lib/slang-standard-module-2026.19/experimental/workgraph.slang", "size": 8900, "sha256": "4ccb32d0cc2a4d735ae2da16ef6908d24d0a991753e8593ff01ef433e3aab078"}, + {"path": "lib/slang-standard-module-2026.19/experimental/workgraph.slang-module", "size": 101940, "sha256": "80bd3784625598a8856fd69181782ec029d70909d13829e31ec2d627eb739e68"}, + {"path": "lib/slang-standard-module-2026.19/slang/WaveMatrix.slang", "size": 36043, "sha256": "7c54344d6f5a0570d6417888296753e6b341e041ca4a6a39335e14af87ffd27e"}, + {"path": "lib/slang-standard-module-2026.19/slang/accelerate-vector-coopmat.slang", "size": 11581, "sha256": "fa3261f635f146ac70fb5dec91a1408121f03798c42ee7d343574bf2b654f06d"}, + {"path": "lib/slang-standard-module-2026.19/slang/activations.slang", "size": 5316, "sha256": "b3f34b0fa1d20a1e7e37a30234b2af5e0ef8bf0ace410592dda205ac9c67fb67"}, + {"path": "lib/slang-standard-module-2026.19/slang/bindless-storage.slang", "size": 16896, "sha256": "d55135354347cd2333caa2346ef79527a9bc8dfd0db9313463e44c53246a3337"}, + {"path": "lib/slang-standard-module-2026.19/slang/functional.slang-module", "size": 73156, "sha256": "62aa66d317055a9978c1a1a516fb483332d9a973b8d51fe9e35959541ed6dbc0"}, + {"path": "lib/slang-standard-module-2026.19/slang/hash-function.slang", "size": 3610, "sha256": "f730f5bb868d8f8805ae9ce6420599b4c43cec17decfedda001705cab3107bc1"}, + {"path": "lib/slang-standard-module-2026.19/slang/iactivation.slang", "size": 1012, "sha256": "5ae0684a7f6d796eceb16d9dd91c6f391ce462b0ae5a88b4b64c8e03939b60cd"}, + {"path": "lib/slang-standard-module-2026.19/slang/iencoder.slang", "size": 902, "sha256": "2177cea7d3da4e4577ee840989fa2a7502939ef14bd57ceed4e6dc870ce3d005"}, + {"path": "lib/slang-standard-module-2026.19/slang/ilayer.slang", "size": 966, "sha256": "3e47ef65ea31f6cff857d8c3158755e679d206058433cd635ec55de87fdbc3fa"}, + {"path": "lib/slang-standard-module-2026.19/slang/inline-vector.slang", "size": 6794, "sha256": "50c9d0726c6e8ea93b2d43c46628b8ca30e3ab02b79942d132040859af214600"}, + {"path": "lib/slang-standard-module-2026.19/slang/istorages.slang", "size": 4048, "sha256": "d1818c0eef09cce3e677d591b7a2e1b09b8770bcf960f97b78f6a29b7c19d2cb"}, + {"path": "lib/slang-standard-module-2026.19/slang/ivector.slang", "size": 4291, "sha256": "1c44acd25cd5ad63756494ef6066865f6e7eef38f486f86beb2fdad2d59e79b3"}, + {"path": "lib/slang-standard-module-2026.19/slang/layers.slang", "size": 3939, "sha256": "0fce3dc9f13022516addc2df9d8dc1751962f9b2207533206e175449ca3a0e00"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-linear-layout-help.slang", "size": 57393, "sha256": "2d29e94392b54d3605c741c9d04bc7bf3cef181afd39a7d6d398a77033f6089e"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-cuda.slang", "size": 21835, "sha256": "0d8de6257095a8bc498b48e2ed2a6be7ddae1b692dd40a347ace2610a8a50cb4"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-layout-helper.slang", "size": 5511, "sha256": "4c82a16fd615b2284fa45bc4ae2163a4346b0ce474315541632c98d999dce3a3"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-metal.slang", "size": 28953, "sha256": "180cbf0b52cb01479e2ec197f5340ac7c5814a18299203aa6c8fa38ec72edb7e"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-vulkan.slang", "size": 17425, "sha256": "345b5b19f8303dd11cfe128e8fe9b1c935c9387af7c85679ed35465c6e366c14"}, + {"path": "lib/slang-standard-module-2026.19/slang/network-parameter-layout-converter.slang", "size": 19874, "sha256": "2ed702f22ab8db77715aebdb5f6ef98068019c8da1d86b08f8b6a8696004598a"}, + {"path": "lib/slang-standard-module-2026.19/slang/neural.slang", "size": 1861, "sha256": "9c13d2c2f46557d704cb0f41c59fd0335243f9dc5692f90b72dfeb6a4db13717"}, + {"path": "lib/slang-standard-module-2026.19/slang/neural.slang-module", "size": 5398204, "sha256": "4abf1833afb6059b4a3a82ee89c9739c0e9e346a37ba67d382789c0bff46290f"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics.slang-module", "size": 2037148, "sha256": "45c1a89cfc31b64446aded1dec696039f716741f4a6da8bf39f8337000edb1df"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics/__builtin.slang-module", "size": 538076, "sha256": "3c1d660efbe6c7ffc638be61009dd21a3f2890e8acdfa7b2488f35b1262f4e2c"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics/__builtin_differentiable.slang-module", "size": 4954076, "sha256": "3941d4ebb45e8d732ad4712686d4080662a7ce7866cc2b177ee5d1f9510071eb"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics/differentiable.slang-module", "size": 18805748, "sha256": "97532e5e9d30cde633966f974fd619d4fa25c51ef1da73f5981c91f12ceb1fc5"}, + {"path": "lib/slang-standard-module-2026.19/slang/permuto-encoder.slang", "size": 14699, "sha256": "e26ce720e984d906b8475dc32eb3dac45ee377ea39591a40044ab311d77302b1"}, + {"path": "lib/slang-standard-module-2026.19/slang/shared-memory-pool.slang", "size": 21226, "sha256": "5e723beac8f33532c40bf67e701412764b16fd656d92040c0da45ba6b07f4a5d"}, + {"path": "lib/slang-standard-module-2026.19/slang/vectorized-reader.slang", "size": 9850, "sha256": "ed75edc8f84a593dee13c1c54fbff023382b7f102dde3046b9917e08ae630daa"} ], "symlinks": [ - {"path": "lib/libgfx.dylib", "target": "libgfx.0.2026.16.dylib"}, - {"path": "lib/libslang-compiler.dylib", "target": "libslang-compiler.0.2026.16.dylib"}, - {"path": "lib/libslang-rt.dylib", "target": "libslang-rt.0.2026.16.dylib"}, - {"path": "lib/libslang.dylib", "target": "libslang-compiler.0.2026.16.dylib"} + {"path": "lib/libgfx.dylib", "target": "libgfx.0.2026.19.dylib"}, + {"path": "lib/libslang-compiler.dylib", "target": "libslang-compiler.0.2026.19.dylib"}, + {"path": "lib/libslang-rt.dylib", "target": "libslang-rt.0.2026.19.dylib"}, + {"path": "lib/libslang.dylib", "target": "libslang-compiler.0.2026.19.dylib"} ] } diff --git a/natives/manifests/windows-aarch64.json b/natives/manifests/windows-aarch64.json index 20d642d..92e6185 100644 --- a/natives/manifests/windows-aarch64.json +++ b/natives/manifests/windows-aarch64.json @@ -1,41 +1,46 @@ { - "slangVersion": "2026.16", + "slangVersion": "2026.19", "platform": "windows-aarch64", - "asset": "slang-2026.16-windows-aarch64.zip", - "url": "https://github.com/shader-slang/slang/releases/download/v2026.16/slang-2026.16-windows-aarch64.zip", - "sha256": "637fd1049e5ef4b5642c044b05f2f1383e08fc686fbe2cfc4a4c18ff9b4309cf", + "asset": "slang-2026.19-windows-aarch64.zip", + "url": "https://github.com/shader-slang/slang/releases/download/v2026.19/slang-2026.19-windows-aarch64.zip", + "sha256": "6ddc5a56d22690d2077f91edea884f88f8ea35cba4d2f717fc84bf1c2ded766f", "files": [ - {"path": "lib/gfx.dll", "size": 1152000, "sha256": "316234f3990e3a0c36388c796116ef24bcea208798ebaf3ec490ddaa407743a2"}, - {"path": "lib/slang-compiler.dll", "size": 25306624, "sha256": "874e9f82c133404400f8e5172efff1866269b8c1b622f61607516bf3774f3e0e"}, - {"path": "lib/slang-glsl-module.dll", "size": 1518592, "sha256": "d4a107061a045bee7f5fe34e2204f6fed10840d2a705c3ad983a21c23930244f"}, - {"path": "lib/slang-glslang.dll", "size": 6503936, "sha256": "ed77b6e9a0cdb9c085b777aa3b1a866c7757959caf1f2c11e9171da8cbbf473e"}, - {"path": "lib/slang-rt.dll", "size": 304640, "sha256": "7fd952b494dba37624db2d304877564cd7c8d80a4999fd5e26ff9f60c2a3e93c"}, - {"path": "lib/slang-standard-module-2026.16/experimental/workgraph.slang", "size": 9233, "sha256": "5ac051e0bbb9e78cad3d7d368aa76045adefe417133182e4b9a783ed711345d7"}, - {"path": "lib/slang-standard-module-2026.16/experimental/workgraph.slang-module", "size": 111548, "sha256": "36f40272a8794c56e9a6e5550d415fe7110c91a7569a7b028d3e6450f2e3ce0c"}, - {"path": "lib/slang-standard-module-2026.16/slang/WaveMatrix.slang", "size": 36919, "sha256": "7b538d81618f9fe7a8a317dd0e85ff259202a7cc3b34246307880acfc2e7f973"}, - {"path": "lib/slang-standard-module-2026.16/slang/accelerate-vector-coopmat.slang", "size": 11868, "sha256": "bdf92713aea036cb8a68bb520155f8e67dc1ef74b299ea2371fd187fbaf5f1e9"}, - {"path": "lib/slang-standard-module-2026.16/slang/activations.slang", "size": 5544, "sha256": "17111ed31a33986a8f3e1028754da83f8e8c17ad4eae082b46a6910c486f1469"}, - {"path": "lib/slang-standard-module-2026.16/slang/bindless-storage.slang", "size": 17464, "sha256": "af5d4c7a6cce1b7c19dcb556823d4855394ee1e0e6d2d2a74887cd3775ec671e"}, - {"path": "lib/slang-standard-module-2026.16/slang/hash-function.slang", "size": 3761, "sha256": "bee7e1dd58b8ac576189f6543ec9c0bcea49d780c92b3f59649317e7f68c0601"}, - {"path": "lib/slang-standard-module-2026.16/slang/iactivation.slang", "size": 1041, "sha256": "886d1de409f9788a15272358306771106d356811ba05431d2e2ea4405fdc80bf"}, - {"path": "lib/slang-standard-module-2026.16/slang/iencoder.slang", "size": 937, "sha256": "d54547342622935f630954e475c532d3e6280b12066456ddb629407bee747c41"}, - {"path": "lib/slang-standard-module-2026.16/slang/ilayer.slang", "size": 993, "sha256": "f90e83e132de9a1b729b85d85ee64cd7ba20c4b0db1321cfb0058db84792541d"}, - {"path": "lib/slang-standard-module-2026.16/slang/inline-vector.slang", "size": 6995, "sha256": "4dd82536ccc99a05af682d8f08891906aa8e8190470cc1746a5ffeafffaf20d5"}, - {"path": "lib/slang-standard-module-2026.16/slang/istorages.slang", "size": 4161, "sha256": "6bd2a6aae09e5bad8a2ef6a3f086f1fee430d859366325f2e343253ba8f06ab4"}, - {"path": "lib/slang-standard-module-2026.16/slang/ivector.slang", "size": 4393, "sha256": "4146fb8627f89c7d0ee2f516f617fdcb27182a62fcb371d248cb43889c4baa4a"}, - {"path": "lib/slang-standard-module-2026.16/slang/layers.slang", "size": 4049, "sha256": "9a772bf23d5697d1b7325dec59856ea47158e05a95218a4ecb17e6128a277d1e"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-linear-layout-help.slang", "size": 58607, "sha256": "6778fc740686062015448effd4536ef35331d62a1ff6f4278e5c7a5af1a8a163"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-cuda.slang", "size": 22361, "sha256": "c002e5bbfe7d73bd05691122ea8d0c860c7defa07fd5f077481fbb7d64874c47"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-layout-helper.slang", "size": 5623, "sha256": "a7f3bacede85b39797927710fb8aa47d952e2621428d0eb23b3b3142d3eef00e"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-metal.slang", "size": 29575, "sha256": "60eb69591e610da07a791ee0ff565c1f56117d5e2f00af5f15c26a16daab1420"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-vulkan.slang", "size": 17827, "sha256": "60b9df04e732f0f9598426a0f175f5556d6904d4711281716a8fa986d824e3c4"}, - {"path": "lib/slang-standard-module-2026.16/slang/network-parameter-layout-converter.slang", "size": 20429, "sha256": "40c0a26d4204c63977024e609d13d2f041fcfd36103e072fc87a4c523058c3ae"}, - {"path": "lib/slang-standard-module-2026.16/slang/neural.slang", "size": 1916, "sha256": "598c9c3d987c3231551cb0dbd12bdb6345d0b05f18da5318d1e5b636e5b8d43e"}, - {"path": "lib/slang-standard-module-2026.16/slang/neural.slang-module", "size": 5508852, "sha256": "c88483331d7299f003db3625c54647e1d82c5aa629f92924388898eb076fc40c"}, - {"path": "lib/slang-standard-module-2026.16/slang/permuto-encoder.slang", "size": 15069, "sha256": "8564f73a57c355c478ca86349c18ec7e7fe321f316c71126531ba1a98f3e4011"}, - {"path": "lib/slang-standard-module-2026.16/slang/shared-memory-pool.slang", "size": 21744, "sha256": "cc2b1fe4ff31cfdef98cb8d4802edc50508c6b7431ef7a64664b4ad32a9a33e2"}, - {"path": "lib/slang-standard-module-2026.16/slang/vectorized-reader.slang", "size": 10164, "sha256": "5da65a878563ac190c847a90a85d6a404f4091e159fd2cdbc98730aef005d646"}, - {"path": "lib/slang.dll", "size": 162304, "sha256": "9cde641c9f419fd4b87dd8982190a54224e837d4ca498c1b8c547541ca8a6358"} + {"path": "lib/gfx.dll", "size": 1152512, "sha256": "602d8444a94ce81b4bd6fb3f35ffdd87b30f1082b1f1ab700024777c1a596796"}, + {"path": "lib/slang-compiler.dll", "size": 25815040, "sha256": "90c48dff69fc8b3a94eefb7db3d343d8f7d090e6e4f5f4211b9c0fd8cc92508f"}, + {"path": "lib/slang-glsl-module.dll", "size": 1480192, "sha256": "aed8277c5bbb88d13a3eead7e6ba1e3c742b5d30286f0a6bd03980692b62abf5"}, + {"path": "lib/slang-glslang.dll", "size": 6550528, "sha256": "36f54a682a2e2885e3bed387e0d983ac86ccf9d8e89f47a527a4b4a1ac9af470"}, + {"path": "lib/slang-rt.dll", "size": 305664, "sha256": "ab91568be3c16f2c5a639cffa99f07b809a1a21a28169fb8f4a72bb1b825788f"}, + {"path": "lib/slang-standard-module-2026.19/experimental/workgraph.slang", "size": 9233, "sha256": "5ac051e0bbb9e78cad3d7d368aa76045adefe417133182e4b9a783ed711345d7"}, + {"path": "lib/slang-standard-module-2026.19/experimental/workgraph.slang-module", "size": 101940, "sha256": "0f570cac3ebdcbc6d5ca8ee1eafa4441dd6bea4c0b8a37282a4a095dc72fd8a8"}, + {"path": "lib/slang-standard-module-2026.19/slang/WaveMatrix.slang", "size": 36919, "sha256": "7b538d81618f9fe7a8a317dd0e85ff259202a7cc3b34246307880acfc2e7f973"}, + {"path": "lib/slang-standard-module-2026.19/slang/accelerate-vector-coopmat.slang", "size": 11868, "sha256": "bdf92713aea036cb8a68bb520155f8e67dc1ef74b299ea2371fd187fbaf5f1e9"}, + {"path": "lib/slang-standard-module-2026.19/slang/activations.slang", "size": 5544, "sha256": "17111ed31a33986a8f3e1028754da83f8e8c17ad4eae082b46a6910c486f1469"}, + {"path": "lib/slang-standard-module-2026.19/slang/bindless-storage.slang", "size": 17464, "sha256": "af5d4c7a6cce1b7c19dcb556823d4855394ee1e0e6d2d2a74887cd3775ec671e"}, + {"path": "lib/slang-standard-module-2026.19/slang/functional.slang-module", "size": 73156, "sha256": "03994ed83a8c7b02f8d8c7cb795556badeaf09fa5ffea306cd5e305b2da6b84d"}, + {"path": "lib/slang-standard-module-2026.19/slang/hash-function.slang", "size": 3761, "sha256": "bee7e1dd58b8ac576189f6543ec9c0bcea49d780c92b3f59649317e7f68c0601"}, + {"path": "lib/slang-standard-module-2026.19/slang/iactivation.slang", "size": 1041, "sha256": "886d1de409f9788a15272358306771106d356811ba05431d2e2ea4405fdc80bf"}, + {"path": "lib/slang-standard-module-2026.19/slang/iencoder.slang", "size": 937, "sha256": "d54547342622935f630954e475c532d3e6280b12066456ddb629407bee747c41"}, + {"path": "lib/slang-standard-module-2026.19/slang/ilayer.slang", "size": 993, "sha256": "f90e83e132de9a1b729b85d85ee64cd7ba20c4b0db1321cfb0058db84792541d"}, + {"path": "lib/slang-standard-module-2026.19/slang/inline-vector.slang", "size": 6995, "sha256": "4dd82536ccc99a05af682d8f08891906aa8e8190470cc1746a5ffeafffaf20d5"}, + {"path": "lib/slang-standard-module-2026.19/slang/istorages.slang", "size": 4161, "sha256": "6bd2a6aae09e5bad8a2ef6a3f086f1fee430d859366325f2e343253ba8f06ab4"}, + {"path": "lib/slang-standard-module-2026.19/slang/ivector.slang", "size": 4393, "sha256": "4146fb8627f89c7d0ee2f516f617fdcb27182a62fcb371d248cb43889c4baa4a"}, + {"path": "lib/slang-standard-module-2026.19/slang/layers.slang", "size": 4049, "sha256": "9a772bf23d5697d1b7325dec59856ea47158e05a95218a4ecb17e6128a277d1e"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-linear-layout-help.slang", "size": 58607, "sha256": "6778fc740686062015448effd4536ef35331d62a1ff6f4278e5c7a5af1a8a163"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-cuda.slang", "size": 22361, "sha256": "c002e5bbfe7d73bd05691122ea8d0c860c7defa07fd5f077481fbb7d64874c47"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-layout-helper.slang", "size": 5623, "sha256": "a7f3bacede85b39797927710fb8aa47d952e2621428d0eb23b3b3142d3eef00e"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-metal.slang", "size": 29575, "sha256": "60eb69591e610da07a791ee0ff565c1f56117d5e2f00af5f15c26a16daab1420"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-vulkan.slang", "size": 17827, "sha256": "60b9df04e732f0f9598426a0f175f5556d6904d4711281716a8fa986d824e3c4"}, + {"path": "lib/slang-standard-module-2026.19/slang/network-parameter-layout-converter.slang", "size": 20429, "sha256": "40c0a26d4204c63977024e609d13d2f041fcfd36103e072fc87a4c523058c3ae"}, + {"path": "lib/slang-standard-module-2026.19/slang/neural.slang", "size": 1916, "sha256": "598c9c3d987c3231551cb0dbd12bdb6345d0b05f18da5318d1e5b636e5b8d43e"}, + {"path": "lib/slang-standard-module-2026.19/slang/neural.slang-module", "size": 5398260, "sha256": "6d49d7a31732b3230aca3cd99bf4a4063a8ec27f1a431f246d178dc01737540b"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics.slang-module", "size": 2037148, "sha256": "6cd84341947f58f89289b0825c5fa8b11ccd8fe67d374f2c6da2f74d8f287a3e"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics/__builtin.slang-module", "size": 538076, "sha256": "3fcd5e729f4a68b10c989fc22b0a9f476dd18ed2650d1837826d48a0f4cf7477"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics/__builtin_differentiable.slang-module", "size": 4954076, "sha256": "5be27ba31476ce969bf54d53e8c6b1268a2d82db1651299a8cca45551586edf6"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics/differentiable.slang-module", "size": 18805748, "sha256": "3dd816f451f276591f5fbdd44ca3882ae21a6541b3cec17ea54fa95b1bd31d35"}, + {"path": "lib/slang-standard-module-2026.19/slang/permuto-encoder.slang", "size": 15069, "sha256": "8564f73a57c355c478ca86349c18ec7e7fe321f316c71126531ba1a98f3e4011"}, + {"path": "lib/slang-standard-module-2026.19/slang/shared-memory-pool.slang", "size": 21744, "sha256": "cc2b1fe4ff31cfdef98cb8d4802edc50508c6b7431ef7a64664b4ad32a9a33e2"}, + {"path": "lib/slang-standard-module-2026.19/slang/vectorized-reader.slang", "size": 10164, "sha256": "5da65a878563ac190c847a90a85d6a404f4091e159fd2cdbc98730aef005d646"}, + {"path": "lib/slang.dll", "size": 162304, "sha256": "82819611dbccf1e213e5f834ffef38bd8bdad82f4cb6760ceb7cd4637a211837"} ], "symlinks": [ diff --git a/natives/manifests/windows-x86_64.json b/natives/manifests/windows-x86_64.json index 4f65384..984f4f2 100644 --- a/natives/manifests/windows-x86_64.json +++ b/natives/manifests/windows-x86_64.json @@ -1,41 +1,46 @@ { - "slangVersion": "2026.16", + "slangVersion": "2026.19", "platform": "windows-x86_64", - "asset": "slang-2026.16-windows-x86_64.zip", - "url": "https://github.com/shader-slang/slang/releases/download/v2026.16/slang-2026.16-windows-x86_64.zip", - "sha256": "7fa1e69d68706ed18cc679270bc3a2e4a3f7400d9f7bf393564fad3b3bc03e25", + "asset": "slang-2026.19-windows-x86_64.zip", + "url": "https://github.com/shader-slang/slang/releases/download/v2026.19/slang-2026.19-windows-x86_64.zip", + "sha256": "fc922f214b5d115f663932e59e80e0f6b6cc6fae140979cf307da6459b6f8f33", "files": [ - {"path": "lib/gfx.dll", "size": 1145856, "sha256": "bbbb396dc116f25829968e52a47e7afbb771a1c1e498a91b4e41cdd55c5210b8"}, - {"path": "lib/slang-compiler.dll", "size": 25376768, "sha256": "5b7c2a51827818ce64182ad0522d6bb50f87679c21baf5f364c7194d604372c5"}, - {"path": "lib/slang-glsl-module.dll", "size": 1530368, "sha256": "1711685c63ed651dfca6e39b7fe05a12e5541fae50beccb7e6323e3283893b7d"}, - {"path": "lib/slang-glslang.dll", "size": 6173184, "sha256": "d2da447436922fcaf25f2e05cffae78576b76c15775fd68570851dc3379df417"}, - {"path": "lib/slang-rt.dll", "size": 311808, "sha256": "734f7eadc852c247c55282daa9fbc303c097abb457ce313980302315a2b730ad"}, - {"path": "lib/slang-standard-module-2026.16/experimental/workgraph.slang", "size": 9233, "sha256": "5ac051e0bbb9e78cad3d7d368aa76045adefe417133182e4b9a783ed711345d7"}, - {"path": "lib/slang-standard-module-2026.16/experimental/workgraph.slang-module", "size": 111548, "sha256": "36f40272a8794c56e9a6e5550d415fe7110c91a7569a7b028d3e6450f2e3ce0c"}, - {"path": "lib/slang-standard-module-2026.16/slang/WaveMatrix.slang", "size": 36919, "sha256": "7b538d81618f9fe7a8a317dd0e85ff259202a7cc3b34246307880acfc2e7f973"}, - {"path": "lib/slang-standard-module-2026.16/slang/accelerate-vector-coopmat.slang", "size": 11868, "sha256": "bdf92713aea036cb8a68bb520155f8e67dc1ef74b299ea2371fd187fbaf5f1e9"}, - {"path": "lib/slang-standard-module-2026.16/slang/activations.slang", "size": 5544, "sha256": "17111ed31a33986a8f3e1028754da83f8e8c17ad4eae082b46a6910c486f1469"}, - {"path": "lib/slang-standard-module-2026.16/slang/bindless-storage.slang", "size": 17464, "sha256": "af5d4c7a6cce1b7c19dcb556823d4855394ee1e0e6d2d2a74887cd3775ec671e"}, - {"path": "lib/slang-standard-module-2026.16/slang/hash-function.slang", "size": 3761, "sha256": "bee7e1dd58b8ac576189f6543ec9c0bcea49d780c92b3f59649317e7f68c0601"}, - {"path": "lib/slang-standard-module-2026.16/slang/iactivation.slang", "size": 1041, "sha256": "886d1de409f9788a15272358306771106d356811ba05431d2e2ea4405fdc80bf"}, - {"path": "lib/slang-standard-module-2026.16/slang/iencoder.slang", "size": 937, "sha256": "d54547342622935f630954e475c532d3e6280b12066456ddb629407bee747c41"}, - {"path": "lib/slang-standard-module-2026.16/slang/ilayer.slang", "size": 993, "sha256": "f90e83e132de9a1b729b85d85ee64cd7ba20c4b0db1321cfb0058db84792541d"}, - {"path": "lib/slang-standard-module-2026.16/slang/inline-vector.slang", "size": 6995, "sha256": "4dd82536ccc99a05af682d8f08891906aa8e8190470cc1746a5ffeafffaf20d5"}, - {"path": "lib/slang-standard-module-2026.16/slang/istorages.slang", "size": 4161, "sha256": "6bd2a6aae09e5bad8a2ef6a3f086f1fee430d859366325f2e343253ba8f06ab4"}, - {"path": "lib/slang-standard-module-2026.16/slang/ivector.slang", "size": 4393, "sha256": "4146fb8627f89c7d0ee2f516f617fdcb27182a62fcb371d248cb43889c4baa4a"}, - {"path": "lib/slang-standard-module-2026.16/slang/layers.slang", "size": 4049, "sha256": "9a772bf23d5697d1b7325dec59856ea47158e05a95218a4ecb17e6128a277d1e"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-linear-layout-help.slang", "size": 58607, "sha256": "6778fc740686062015448effd4536ef35331d62a1ff6f4278e5c7a5af1a8a163"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-cuda.slang", "size": 22361, "sha256": "c002e5bbfe7d73bd05691122ea8d0c860c7defa07fd5f077481fbb7d64874c47"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-layout-helper.slang", "size": 5623, "sha256": "a7f3bacede85b39797927710fb8aa47d952e2621428d0eb23b3b3142d3eef00e"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-metal.slang", "size": 29575, "sha256": "60eb69591e610da07a791ee0ff565c1f56117d5e2f00af5f15c26a16daab1420"}, - {"path": "lib/slang-standard-module-2026.16/slang/mma-tiled-vulkan.slang", "size": 17827, "sha256": "60b9df04e732f0f9598426a0f175f5556d6904d4711281716a8fa986d824e3c4"}, - {"path": "lib/slang-standard-module-2026.16/slang/network-parameter-layout-converter.slang", "size": 20429, "sha256": "40c0a26d4204c63977024e609d13d2f041fcfd36103e072fc87a4c523058c3ae"}, - {"path": "lib/slang-standard-module-2026.16/slang/neural.slang", "size": 1916, "sha256": "598c9c3d987c3231551cb0dbd12bdb6345d0b05f18da5318d1e5b636e5b8d43e"}, - {"path": "lib/slang-standard-module-2026.16/slang/neural.slang-module", "size": 5508852, "sha256": "c88483331d7299f003db3625c54647e1d82c5aa629f92924388898eb076fc40c"}, - {"path": "lib/slang-standard-module-2026.16/slang/permuto-encoder.slang", "size": 15069, "sha256": "8564f73a57c355c478ca86349c18ec7e7fe321f316c71126531ba1a98f3e4011"}, - {"path": "lib/slang-standard-module-2026.16/slang/shared-memory-pool.slang", "size": 21744, "sha256": "cc2b1fe4ff31cfdef98cb8d4802edc50508c6b7431ef7a64664b4ad32a9a33e2"}, - {"path": "lib/slang-standard-module-2026.16/slang/vectorized-reader.slang", "size": 10164, "sha256": "5da65a878563ac190c847a90a85d6a404f4091e159fd2cdbc98730aef005d646"}, - {"path": "lib/slang.dll", "size": 159232, "sha256": "900075407d3743bca8a70dcbb63d4fc623a5a18da4f1d349c866c67b098e4d27"} + {"path": "lib/gfx.dll", "size": 1145856, "sha256": "940bb626b182c284ce8cc7a3ff5cc868d85698595fed9ae830618efd42403a64"}, + {"path": "lib/slang-compiler.dll", "size": 25918976, "sha256": "26cc5c10d7b7fd4e160f11a7bcef835a9fb42a240e6265d28b0f8ab587de057c"}, + {"path": "lib/slang-glsl-module.dll", "size": 1491456, "sha256": "46aaeb00345b6042f92d1969cadee1d9dce61bec9337121296bce6742365310c"}, + {"path": "lib/slang-glslang.dll", "size": 6215680, "sha256": "33949342117f8d195a581d5a23689c2819400f5a161706d73148f0dc0db1c13a"}, + {"path": "lib/slang-rt.dll", "size": 312320, "sha256": "4f4689e199e3748dcbdf7f0ccd6baffb07d0d3edc19928563f3ea047711f6dc0"}, + {"path": "lib/slang-standard-module-2026.19/experimental/workgraph.slang", "size": 9233, "sha256": "5ac051e0bbb9e78cad3d7d368aa76045adefe417133182e4b9a783ed711345d7"}, + {"path": "lib/slang-standard-module-2026.19/experimental/workgraph.slang-module", "size": 101940, "sha256": "0f570cac3ebdcbc6d5ca8ee1eafa4441dd6bea4c0b8a37282a4a095dc72fd8a8"}, + {"path": "lib/slang-standard-module-2026.19/slang/WaveMatrix.slang", "size": 36919, "sha256": "7b538d81618f9fe7a8a317dd0e85ff259202a7cc3b34246307880acfc2e7f973"}, + {"path": "lib/slang-standard-module-2026.19/slang/accelerate-vector-coopmat.slang", "size": 11868, "sha256": "bdf92713aea036cb8a68bb520155f8e67dc1ef74b299ea2371fd187fbaf5f1e9"}, + {"path": "lib/slang-standard-module-2026.19/slang/activations.slang", "size": 5544, "sha256": "17111ed31a33986a8f3e1028754da83f8e8c17ad4eae082b46a6910c486f1469"}, + {"path": "lib/slang-standard-module-2026.19/slang/bindless-storage.slang", "size": 17464, "sha256": "af5d4c7a6cce1b7c19dcb556823d4855394ee1e0e6d2d2a74887cd3775ec671e"}, + {"path": "lib/slang-standard-module-2026.19/slang/functional.slang-module", "size": 73156, "sha256": "03994ed83a8c7b02f8d8c7cb795556badeaf09fa5ffea306cd5e305b2da6b84d"}, + {"path": "lib/slang-standard-module-2026.19/slang/hash-function.slang", "size": 3761, "sha256": "bee7e1dd58b8ac576189f6543ec9c0bcea49d780c92b3f59649317e7f68c0601"}, + {"path": "lib/slang-standard-module-2026.19/slang/iactivation.slang", "size": 1041, "sha256": "886d1de409f9788a15272358306771106d356811ba05431d2e2ea4405fdc80bf"}, + {"path": "lib/slang-standard-module-2026.19/slang/iencoder.slang", "size": 937, "sha256": "d54547342622935f630954e475c532d3e6280b12066456ddb629407bee747c41"}, + {"path": "lib/slang-standard-module-2026.19/slang/ilayer.slang", "size": 993, "sha256": "f90e83e132de9a1b729b85d85ee64cd7ba20c4b0db1321cfb0058db84792541d"}, + {"path": "lib/slang-standard-module-2026.19/slang/inline-vector.slang", "size": 6995, "sha256": "4dd82536ccc99a05af682d8f08891906aa8e8190470cc1746a5ffeafffaf20d5"}, + {"path": "lib/slang-standard-module-2026.19/slang/istorages.slang", "size": 4161, "sha256": "6bd2a6aae09e5bad8a2ef6a3f086f1fee430d859366325f2e343253ba8f06ab4"}, + {"path": "lib/slang-standard-module-2026.19/slang/ivector.slang", "size": 4393, "sha256": "4146fb8627f89c7d0ee2f516f617fdcb27182a62fcb371d248cb43889c4baa4a"}, + {"path": "lib/slang-standard-module-2026.19/slang/layers.slang", "size": 4049, "sha256": "9a772bf23d5697d1b7325dec59856ea47158e05a95218a4ecb17e6128a277d1e"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-linear-layout-help.slang", "size": 58607, "sha256": "6778fc740686062015448effd4536ef35331d62a1ff6f4278e5c7a5af1a8a163"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-cuda.slang", "size": 22361, "sha256": "c002e5bbfe7d73bd05691122ea8d0c860c7defa07fd5f077481fbb7d64874c47"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-layout-helper.slang", "size": 5623, "sha256": "a7f3bacede85b39797927710fb8aa47d952e2621428d0eb23b3b3142d3eef00e"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-metal.slang", "size": 29575, "sha256": "60eb69591e610da07a791ee0ff565c1f56117d5e2f00af5f15c26a16daab1420"}, + {"path": "lib/slang-standard-module-2026.19/slang/mma-tiled-vulkan.slang", "size": 17827, "sha256": "60b9df04e732f0f9598426a0f175f5556d6904d4711281716a8fa986d824e3c4"}, + {"path": "lib/slang-standard-module-2026.19/slang/network-parameter-layout-converter.slang", "size": 20429, "sha256": "40c0a26d4204c63977024e609d13d2f041fcfd36103e072fc87a4c523058c3ae"}, + {"path": "lib/slang-standard-module-2026.19/slang/neural.slang", "size": 1916, "sha256": "598c9c3d987c3231551cb0dbd12bdb6345d0b05f18da5318d1e5b636e5b8d43e"}, + {"path": "lib/slang-standard-module-2026.19/slang/neural.slang-module", "size": 5398260, "sha256": "6d49d7a31732b3230aca3cd99bf4a4063a8ec27f1a431f246d178dc01737540b"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics.slang-module", "size": 2037148, "sha256": "6cd84341947f58f89289b0825c5fa8b11ccd8fe67d374f2c6da2f74d8f287a3e"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics/__builtin.slang-module", "size": 538076, "sha256": "3fcd5e729f4a68b10c989fc22b0a9f476dd18ed2650d1837826d48a0f4cf7477"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics/__builtin_differentiable.slang-module", "size": 4954076, "sha256": "5be27ba31476ce969bf54d53e8c6b1268a2d82db1651299a8cca45551586edf6"}, + {"path": "lib/slang-standard-module-2026.19/slang/numerics/differentiable.slang-module", "size": 18805748, "sha256": "3dd816f451f276591f5fbdd44ca3882ae21a6541b3cec17ea54fa95b1bd31d35"}, + {"path": "lib/slang-standard-module-2026.19/slang/permuto-encoder.slang", "size": 15069, "sha256": "8564f73a57c355c478ca86349c18ec7e7fe321f316c71126531ba1a98f3e4011"}, + {"path": "lib/slang-standard-module-2026.19/slang/shared-memory-pool.slang", "size": 21744, "sha256": "cc2b1fe4ff31cfdef98cb8d4802edc50508c6b7431ef7a64664b4ad32a9a33e2"}, + {"path": "lib/slang-standard-module-2026.19/slang/vectorized-reader.slang", "size": 10164, "sha256": "5da65a878563ac190c847a90a85d6a404f4091e159fd2cdbc98730aef005d646"}, + {"path": "lib/slang.dll", "size": 159744, "sha256": "1bac13fe0e09e52d0359e8263dba80f744d61f26f2c3be11db0ea1464e428525"} ], "symlinks": [ diff --git a/slang/src/main/java/io/github/refux/slang/GlobalSession.java b/slang/src/main/java/io/github/refux/slang/GlobalSession.java index 2cf0093..702a7a9 100644 --- a/slang/src/main/java/io/github/refux/slang/GlobalSession.java +++ b/slang/src/main/java/io/github/refux/slang/GlobalSession.java @@ -1,6 +1,9 @@ package io.github.refux.slang; import io.github.refux.slang.ffi.IGlobalSession; +import java.util.Arrays; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * The process-level Slang compiler instance ({@code slang::IGlobalSession}): the factory for @@ -52,17 +55,15 @@ public String buildTagString() { } /** - * The serialized-module version this Slang build writes — and therefore one it reads. IR whose - * {@link ModuleInfo#moduleVersion()} equals this loads; {@link Session#loadModuleFromIr} checks - * exactly that before handing bytes to native code. + * The serialized-module version this Slang build writes — and therefore one it certainly reads. * - *

Note this is the version written, which may be narrower than the set read: a build might - * also accept older versions. Slang knows the real range — {@code slangc - * -get-supported-module-versions} prints it — but exports no API to ask, so a binding cannot - * read it. The written version is the one value that is certainly readable, so it is used as a - * conservative test: the cost of rejecting IR that would in fact have loaded is recompiling it - * from source, whereas the cost of accepting IR that would not is the process aborting with no - * diagnostic. + *

A build may read a range of versions, of which this is only the newest. Slang knows the + * real range — {@code slangc -get-supported-module-versions} prints it — but exports no API to + * ask. Since 2026.18.3 that does not matter: Slang checks the version itself on load, and + * {@link Session#loadModuleFromIr} defers to it. Against older releases, which abort the process + * on IR they cannot read, {@link Session#loadModuleFromIr} lets only this version through: the + * cost of rejecting IR that would in fact have loaded is recompiling it from source, whereas the + * cost of accepting IR that would not is the process aborting with no diagnostic. * *

Observed once, by compiling a trivial module and reading back what it serialized to; the * result is cached for the life of this global session. @@ -86,6 +87,34 @@ public long supportedModuleVersion() { } } + /** + * Whether this library checks a serialized module's format and version before deserializing + * it, reporting IR it cannot read as an error. Slang does from 2026.18.3 (upstream #12905); + * older releases abort the process instead. Read from the build tag, so a build whose tag is no + * release number (a local build without git tags, say) counts as an older one. + */ + boolean validatesModuleIrOnLoad() { + return releasedAtLeast(buildTagString(), 2026, 18, 3); + } + + // Release tags are year.release[.patch]; a local build appends git-describe noise + // ("2026.19-12-gdeadbee"). Bounded digits keep parseInt from overflowing on junk. + private static final Pattern RELEASE_TAG = Pattern.compile("v?(\\d{1,9})\\.(\\d{1,9})(?:\\.(\\d{1,9}))?.*"); + + /** Whether {@code buildTag} names release {@code year.release.patch} or later; false if no release. */ + static boolean releasedAtLeast(String buildTag, int year, int release, int patch) { + Matcher tag = RELEASE_TAG.matcher(buildTag == null ? "" : buildTag); + if (!tag.matches()) { + return false; + } + int[] named = { + Integer.parseInt(tag.group(1)), + Integer.parseInt(tag.group(2)), + tag.group(3) == null ? 0 : Integer.parseInt(tag.group(3)) + }; + return Arrays.compare(named, new int[] {year, release, patch}) >= 0; + } + /** Aliveness-checked access for package internals and ffi-layer interop. */ IGlobalSession ffi() { handle(); diff --git a/slang/src/main/java/io/github/refux/slang/Session.java b/slang/src/main/java/io/github/refux/slang/Session.java index b42baf3..86b5e72 100644 --- a/slang/src/main/java/io/github/refux/slang/Session.java +++ b/slang/src/main/java/io/github/refux/slang/Session.java @@ -54,7 +54,9 @@ public Module loadModuleFromSource(String name, String source) { * * @param ir the serialized module bytes to inspect * @return what the IR declares: its module version, the Slang build that wrote it, and its name - * @throws SlangException when {@code ir} is not a readable serialized module + * @throws SlangException when {@code ir} is not a readable serialized module — including IR in a + * serialization format this build no longer reads, which carries result + * {@code SLANG_E_NOT_AVAILABLE} */ public ModuleInfo moduleInfo(byte[] ir) { checkThread(); @@ -63,28 +65,60 @@ public ModuleInfo moduleInfo(byte[] ir) { /** * Loads a module from {@link Module#serialize() serialized} checked IR, skipping parse and - * type-check. Other modules {@code import} it by {@code name}. The IR is only readable by a - * compatible Slang build; a mismatch throws {@link SlangCompileException}, and the caller - * should recompile the module from source. + * type-check. Other modules {@code import} it by {@code name}. Serialized IR is tied to the + * Slang that wrote it — a build reads only a range of module versions — and IR this build + * cannot read throws {@link SlangCompileException}, after which the caller should recompile + * the module from source. * - *

Compatibility is checked before the bytes reach native code, via {@link #moduleInfo}. That - * check is not defensive programming: Slang aborts the process on IR whose module - * version it does not read — no exception, no diagnostic, no {@code hs_err} — so a mismatch - * cannot be caught after the fact. + *

Which versions load is Slang's call. Since 2026.18.3 Slang checks a module's format and + * version before deserializing it and reports what it cannot read, so any version it accepts + * loads, including versions older than the one it writes. Releases before that abort the + * process on IR whose module version they do not read — no exception, no diagnostic, no + * {@code hs_err} — so against those only {@link GlobalSession#supportedModuleVersion()} is let + * through to native code. Either way the IR's metadata is read first ({@link #moduleInfo}), so a + * serialization format the build no longer reads fails with the same actionable exception. */ public Module loadModuleFromIr(String name, byte[] ir) { checkThread(); - ModuleInfo info = session.loadModuleInfoFromIrBlob(ir); - long supported = global.supportedModuleVersion(); - if (info.moduleVersion() != supported) { + ModuleInfo info; + try { + info = session.loadModuleInfoFromIrBlob(ir); + } catch (SlangException e) { + if (e.result() != SlangNative.SLANG_E_NOT_AVAILABLE) { + throw e; + } + // A retired serialization format (2026.18.3 stopped reading format 1) hides its metadata + // too, so there is no version or writer to report: only the module and the remedy. + throw new SlangCompileException( + "cannot load serialized module '" + name + "': it was written in a serialization format" + + " this build (Slang " + global.buildTagString() + ") no longer reads." + + " Recompile it from source.", + e.result()); + } + long written = global.supportedModuleVersion(); + if (info.moduleVersion() != written && !global.validatesModuleIrOnLoad()) { throw new SlangCompileException( "cannot load serialized module '" + info.name() + "': it is module version " + info.moduleVersion() + ", written by Slang " + info.compilerVersion() + ", but this build (Slang " + global.buildTagString() + ") reads module version " - + supported + ". Recompile it from source.", + + written + ". Recompile it from source.", SlangNative.SLANG_FAIL); } - return new Module(this, session.loadModuleFromIrBlob(name, name + ".slang-module", ir)); + try { + return new Module(this, session.loadModuleFromIrBlob(name, name + ".slang-module", ir)); + } catch (SlangCompileException e) { + if (info.moduleVersion() == written) { + throw e; // not a cross-version load, so Slang's diagnostics say it all + } + // Slang refused IR from another version (E00130), or failed on it for some other reason; + // either way the remedy is the same, and its own diagnostics follow. + throw new SlangCompileException( + "cannot load serialized module '" + info.name() + "': it is module version " + + info.moduleVersion() + ", written by Slang " + info.compilerVersion() + + ", and this build (Slang " + global.buildTagString() + ") writes module version " + + written + ". Recompile it from source.\n" + e.getMessage(), + e.result()); + } } /** diff --git a/slang/src/main/java/io/github/refux/slang/ffi/SlangNative.java b/slang/src/main/java/io/github/refux/slang/ffi/SlangNative.java index 3cc1358..b717505 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/SlangNative.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/SlangNative.java @@ -29,6 +29,14 @@ public static boolean succeeded(int slangResult) { /** {@code SLANG_FAIL} — the generic failure result (COM {@code E_FAIL}). */ public static final int SLANG_FAIL = 0x80004005; + /** + * {@code SLANG_E_NOT_AVAILABLE} — {@code SLANG_MAKE_CORE_ERROR(7)} in slang.h, i.e. facility + * {@code 0x200}, code 7. Since Slang 2026.18.3, {@code slang_loadModuleInfoFromIRBlob} returns it + * for serialized IR in a format the build no longer reads (observed against 2026.19); garbage + * bytes get {@link #SLANG_FAIL} instead. + */ + public static final int SLANG_E_NOT_AVAILABLE = 0x82000007; + /** * Reads a NUL-terminated UTF-8 C string. The segment is typically a zero-length segment read * from native memory, so it is first re-interpreted as unbounded; the read stops at the NUL. diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/BindingType.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/BindingType.java index 7089057..c9c7c29 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/BindingType.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/BindingType.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/BitfieldPackingRules.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/BitfieldPackingRules.java new file mode 100644 index 0000000..05001cd --- /dev/null +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/BitfieldPackingRules.java @@ -0,0 +1,14 @@ +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. +// Regenerate: see CLAUDE.md / DESIGN.md §9. +package io.github.refux.slang.ffi.gen; + +/** + * Values of C enum {@code BitfieldPackingRules} (int-sized). + */ +public final class BitfieldPackingRules { + private BitfieldPackingRules() {} + + public static final int Default = 0; + public static final int MSVC = 1; + public static final int LegacyMSBFirstMSVC = 2; +} diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/BuiltinModuleName.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/BuiltinModuleName.java index 4e5ff78..c1d0794 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/BuiltinModuleName.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/BuiltinModuleName.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ByteCodeFuncInfo.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ByteCodeFuncInfo.java index 19a4a9c..0bdaeb5 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ByteCodeFuncInfo.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ByteCodeFuncInfo.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ByteCodeRunnerDesc.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ByteCodeRunnerDesc.java index 7b14acc..92c696a 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ByteCodeRunnerDesc.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ByteCodeRunnerDesc.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/CompilerOptionEntry.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/CompilerOptionEntry.java index 919fabb..e1dbbd1 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/CompilerOptionEntry.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/CompilerOptionEntry.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/CompilerOptionName.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/CompilerOptionName.java index e21da24..543bb3e 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/CompilerOptionName.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/CompilerOptionName.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; @@ -161,10 +161,12 @@ private CompilerOptionName() {} public static final int CoverageManifestOutput = 150; public static final int TraceCoverageCounterByteWidth = 151; public static final int TraceCoverageBoolean = 152; - public static final int CompilerVersion = 153; public static final int SPIRVUnifiedDescriptorHeapStride = 154; public static final int WarningLevel = 155; public static final int SeparateDebugInfoOutput = 156; public static final int DebugInfoIncludeSource = 157; - public static final int CountOf = 158; + public static final int TraceCoverageBindlessIndex = 158; + public static final int GetCompilerPath = 159; + public static final int BitfieldPackingRules = 160; + public static final int CountOf = 161; } diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/CompilerOptionValue.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/CompilerOptionValue.java index 2d4fe54..1031c52 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/CompilerOptionValue.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/CompilerOptionValue.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/CompilerOptionValueKind.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/CompilerOptionValueKind.java index a8c3e59..e1176e7 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/CompilerOptionValueKind.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/CompilerOptionValueKind.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ContainerType.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ContainerType.java index 02214e3..db0a252 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ContainerType.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ContainerType.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/CooperativeMatrixCombination.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/CooperativeMatrixCombination.java index 58e916f..abfaca5 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/CooperativeMatrixCombination.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/CooperativeMatrixCombination.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/CooperativeMatrixType.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/CooperativeMatrixType.java index 14fbf6a..7299a2d 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/CooperativeMatrixType.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/CooperativeMatrixType.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/CooperativeVectorCombination.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/CooperativeVectorCombination.java index ad11e57..3beba35 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/CooperativeVectorCombination.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/CooperativeVectorCombination.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/CooperativeVectorTypeUsageInfo.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/CooperativeVectorTypeUsageInfo.java index 9e07a58..781fde0 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/CooperativeVectorTypeUsageInfo.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/CooperativeVectorTypeUsageInfo.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageBranchArmKind.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageBranchArmKind.java index 781791f..c64cdbb 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageBranchArmKind.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageBranchArmKind.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageBufferInfo.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageBufferInfo.java index ffd5e04..42a4148 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageBufferInfo.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageBufferInfo.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageCounterMode.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageCounterMode.java index a5d536f..dcea9b5 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageCounterMode.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageCounterMode.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageEntryInfo.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageEntryInfo.java index 38baa84..8da8a19 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageEntryInfo.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageEntryInfo.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; @@ -96,11 +96,25 @@ public static void setLine(MemorySegment self, int value) { /** * Counter slot used by this entry, or * `kInvalidCoverageCounterIndex` when the entry has no runtime - * counter. The current line/function/branch producers use one - * direct counter per entry. Future source-region coverage may use - * `kInvalidCoverageCounterIndex` for entries whose count is - * derived from other counters or represented through tail-extended - * fields. + * counter. + * + * This is NOT unique per entry. Line coverage coalesces entries + * that provably execute together (those in one basic block with + * nothing between them that can abandon the invocation) onto a + * single counter, which is what keeps instrumented shader code + * small. Several entries therefore report the same + * `counterIndex`, and `getCounterCount()` is correspondingly + * smaller than the entry count. + * + * Read results per entry (`counters[entry.counterIndex]` for each + * entry), never per counter: a counter does not identify one + * source location. Sizing a readback buffer from the entry count + * rather than the counter count is a bug. + * + * Function and branch entries always use a dedicated counter. + * Future coverage modes may use `kInvalidCoverageCounterIndex` + * for entries whose count is derived from other counters or + * represented through tail-extended fields. */ public static int getCounterIndex(MemorySegment self) { return self.get(JAVA_INT, OFFSET_counterIndex); diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageEntryKind.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageEntryKind.java index 1e5912b..1854939 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageEntryKind.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/CoverageEntryKind.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/FfiSupport.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/FfiSupport.java index f7cc01d..a1b21e4 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/FfiSupport.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/FfiSupport.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/IBindlessResourceMetadata.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/IBindlessResourceMetadata.java index cdbfe79..dd96469 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/IBindlessResourceMetadata.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/IBindlessResourceMetadata.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/IByteCodeRunner.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/IByteCodeRunner.java index 04b40fe..bf6a91d 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/IByteCodeRunner.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/IByteCodeRunner.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ICompileResult.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ICompileResult.java index bfa9dab..f6d3194 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ICompileResult.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ICompileResult.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/IComponentType.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/IComponentType.java index 21597d6..0c684d8 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/IComponentType.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/IComponentType.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/IComponentType2.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/IComponentType2.java index e2c999c..7eb10e3 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/IComponentType2.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/IComponentType2.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ICooperativeTypesMetadata.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ICooperativeTypesMetadata.java index 630d535..48c0ba2 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ICooperativeTypesMetadata.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ICooperativeTypesMetadata.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ICoverageTracingMetadata.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ICoverageTracingMetadata.java index 1aeb5a2..dc39343 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ICoverageTracingMetadata.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ICoverageTracingMetadata.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; @@ -31,10 +31,13 @@ private ICoverageTracingMetadata() {} /** * Number of runtime counter slots in the synthesized coverage - * buffer. This can differ from `getEntryCount()` once a coverage - * mode has counterless metadata entries, shares one counter across - * several source entries, or reports entries whose counts are - * derived from other counters. + * buffer. Never larger than `getEntryCount()`, and smaller when + * line coverage shares one counter across the source entries of a + * straight-line region. Function and branch entries always take a + * dedicated counter, so the two counts are equal for a compile that + * enables only those modes, or for line coverage where every marker + * lands in its own basic block. Size the counter readback buffer + * from this value, never from the entry count. * * Vtable slot {@value #VT_getCounterCount}. */ @@ -92,10 +95,10 @@ public static int getBufferInfo(MemorySegment self, MemorySegment outInfo) { /** * Number of source coverage entries available through - * `getEntryInfo`. The current line/function/branch producers have - * one entry per counter, but future source-region coverage may - * expose entries that do not map one-to-one with runtime counter - * slots. + * `getEntryInfo`. Every coverage marker produces one entry, so + * this is NOT the number of runtime counters: several entries may + * name the same `counterIndex`. Use `getCounterCount()` to size + * the readback buffer. * * Vtable slot {@value #VT_getEntryCount}. */ diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/IEntryPoint.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/IEntryPoint.java index a1db8f3..b12f879 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/IEntryPoint.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/IEntryPoint.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/IGlobalSession.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/IGlobalSession.java index ffd6844..b975006 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/IGlobalSession.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/IGlobalSession.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; @@ -57,7 +57,7 @@ private IGlobalSession() {} public static final int VT_compileBuiltinModule = 29; public static final int VT_loadBuiltinModule = 30; public static final int VT_saveBuiltinModule = 31; - public static final int VT_getDownstreamCompilerVersion = 32; + public static final int VT_getDownstreamCompilerPath = 32; private static final MethodHandle MH_A_A = FfiSupport.unbound(FunctionDescriptor.of(ADDRESS, ADDRESS)); @@ -71,8 +71,6 @@ private IGlobalSession() {} FfiSupport.unbound(FunctionDescriptor.of(JAVA_INT, ADDRESS, JAVA_INT)); private static final MethodHandle MH_I_AIA = FfiSupport.unbound(FunctionDescriptor.of(JAVA_INT, ADDRESS, JAVA_INT, ADDRESS)); - private static final MethodHandle MH_I_AIAA = - FfiSupport.unbound(FunctionDescriptor.of(JAVA_INT, ADDRESS, JAVA_INT, ADDRESS, ADDRESS)); private static final MethodHandle MH_I_AIAAA = FfiSupport.unbound(FunctionDescriptor.of(JAVA_INT, ADDRESS, JAVA_INT, ADDRESS, ADDRESS, ADDRESS)); private static final MethodHandle MH_I_AIAz = @@ -552,32 +550,35 @@ public static int saveBuiltinModule(MemorySegment self, int module, int archiveT } /** - * Get the version of the downstream/pass-through compiler that Slang will actually load and - * use for `passThrough`, applying the same lazy discovery and library search order used during - * compilation. This lets a client key its behavior off the exact library Slang selected (for - * example, the specific NVRTC that will compile CUDA), which can differ from a version the client - * might discover on its own. + * Get the on-disk path of the downstream/pass-through compiler that Slang will actually load + * and use for `passThrough`, applying the same lazy discovery and library search order used + * during compilation. This lets a client locate the exact library Slang selected - for example, + * the specific NVRTC that will compile CUDA - and load it itself to query capabilities (such as + * the supported architectures) directly. * * This is not a cheap accessor: the first call for a given `passThrough` performs discovery and * loads the downstream library into the process (then memoizes it for subsequent calls). * - * Only some downstream compilers report a numeric version (e.g. NVRTC, DXC, the C/C++ toolchains); - * others (e.g. the glslang family and Tint) always report `(0,0)`. The version is read uniformly - * from the loaded compiler's descriptor, so a versionless-but-loaded compiler still returns - * SLANG_OK with major/minor 0 - which the result alone does not distinguish from a genuine 0.0. + * The path is recovered from the loaded shared library, so it is available for the shared-library + * pass-throughs (e.g. NVRTC, DXC, FXC, glslang). A pass-through backed by an executable located + * on `PATH` (e.g. Clang/GCC/VS) or a target without shared-library introspection (e.g. WASM) has + * no such path and returns SLANG_E_NOT_AVAILABLE, which the client must keep distinct from + * SLANG_E_NOT_FOUND (the compiler was not located at all). * @param passThrough The downstream compiler to query (e.g. SLANG_PASS_THROUGH_NVRTC). - * @param outMajor Receives the major version number. May be null. - * @param outMinor Receives the minor version number. May be null. - * @return SLANG_OK if the compiler was located and loaded (see the versionless note above). - * SLANG_E_NOT_FOUND if the compiler could not be located or loaded, and likewise for - * SLANG_PASS_THROUGH_NONE or an out-of-range value - the result code alone does not distinguish an - * invalid argument from a compiler that is simply not installed. + * @param outPath Must be non-null. On SLANG_OK receives the resolved library path as a blob; left + * untouched on any failure return. + * @return SLANG_OK if the compiler was located, loaded, and its path recovered. + * SLANG_E_NOT_FOUND if the compiler could not be located or loaded (and likewise for + * SLANG_PASS_THROUGH_NONE or an out-of-range value). SLANG_E_NOT_AVAILABLE if the compiler was + * loaded but has no recoverable on-disk path -- it is not backed by a shared library (an + * executable-based command-line compiler such as Clang/GCC/VS, or Metal) or the platform has no + * shared-library introspection (e.g. WASM). * - * Vtable slot {@value #VT_getDownstreamCompilerVersion}. + * Vtable slot {@value #VT_getDownstreamCompilerPath}. */ - public static int getDownstreamCompilerVersion(MemorySegment self, int passThrough, MemorySegment outMajor, MemorySegment outMinor) { + public static int getDownstreamCompilerPath(MemorySegment self, int passThrough, MemorySegment outPath) { try { - return (int) MH_I_AIAA.invokeExact(FfiSupport.fnPtr(self, VT_getDownstreamCompilerVersion), self, passThrough, outMajor, outMinor); + return (int) MH_I_AIA.invokeExact(FfiSupport.fnPtr(self, VT_getDownstreamCompilerPath), self, passThrough, outPath); } catch (Throwable t) { throw FfiSupport.rethrow(t); } diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/IMetadata.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/IMetadata.java index 0b59471..238221c 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/IMetadata.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/IMetadata.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/IModule.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/IModule.java index 6b0a5fe..ff2d9bd 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/IModule.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/IModule.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/IModulePrecompileService_Experimental.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/IModulePrecompileService_Experimental.java index 6c15672..60166fb 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/IModulePrecompileService_Experimental.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/IModulePrecompileService_Experimental.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISession.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISession.java index 569aecf..40e9a05 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISession.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISession.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; @@ -125,6 +125,11 @@ public static MemorySegment loadModule(MemorySegment self, MemorySegment moduleN /** * Load a module from Slang source code. + * + * If `source` is null and `path` names a readable file, the module is + * loaded from that file's contents. If `source` is null and `path` cannot + * be read, the call returns null and (when `outDiagnostics` is provided) + * writes a `CannotOpenFile` diagnostic. * * Vtable slot {@value #VT_loadModuleFromSource}. */ diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangBlob.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangBlob.java index bf48406..c3082b6 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangBlob.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangBlob.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangCastable.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangCastable.java index 5e5f2ed..6cbb87f 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangCastable.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangCastable.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangClonable.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangClonable.java index e81b728..ccda397 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangClonable.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangClonable.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangFileSystem.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangFileSystem.java index 3c581d9..3f304fc 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangFileSystem.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangFileSystem.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangFileSystemExt.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangFileSystemExt.java index 68746b0..2503b34 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangFileSystemExt.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangFileSystemExt.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangMutableFileSystem.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangMutableFileSystem.java index 446aa29..9c72454 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangMutableFileSystem.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangMutableFileSystem.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangProfiler.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangProfiler.java index 74bb7f1..57b3838 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangProfiler.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangProfiler.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangSharedLibrary.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangSharedLibrary.java index 3e11f74..63561eb 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangSharedLibrary.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangSharedLibrary.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangSharedLibraryLoader.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangSharedLibraryLoader.java index 9680787..0cec5bf 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangSharedLibraryLoader.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangSharedLibraryLoader.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangSharedLibrary_Dep1.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangSharedLibrary_Dep1.java index 7f837e2..afd8593 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangSharedLibrary_Dep1.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangSharedLibrary_Dep1.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangUnknown.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangUnknown.java index 597d714..1707ae2 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangUnknown.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangUnknown.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangWriter.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangWriter.java index 06c41ea..58803bd 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangWriter.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISlangWriter.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISyntheticResourceMetadata.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISyntheticResourceMetadata.java index 5563a9b..d01db52 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ISyntheticResourceMetadata.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ISyntheticResourceMetadata.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ITypeConformance.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ITypeConformance.java index fcb7d29..41348c9 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ITypeConformance.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ITypeConformance.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/LayoutRules.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/LayoutRules.java index b2b3a8b..e118ce5 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/LayoutRules.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/LayoutRules.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/OSPathKind.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/OSPathKind.java index 26a5deb..6454633 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/OSPathKind.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/OSPathKind.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/OperandDataType.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/OperandDataType.java index 17ecc2d..1c73a33 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/OperandDataType.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/OperandDataType.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/ParameterCategory.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/ParameterCategory.java index 8fd9b18..2f6ed5c 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/ParameterCategory.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/ParameterCategory.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/PathKind.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/PathKind.java index 1a47478..dd34176 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/PathKind.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/PathKind.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/PreprocessorMacroDesc.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/PreprocessorMacroDesc.java index e98ae6e..2e51833 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/PreprocessorMacroDesc.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/PreprocessorMacroDesc.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SessionDesc.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SessionDesc.java index 4088fb7..f2abd69 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SessionDesc.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SessionDesc.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangAPI.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangAPI.java index 8368ef7..fd3272e 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangAPI.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangAPI.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangArchiveType.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangArchiveType.java index 36d5970..e2196c3 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangArchiveType.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangArchiveType.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangBindableResourceType.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangBindableResourceType.java index 70daf19..be108da 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangBindableResourceType.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangBindableResourceType.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangBindingType.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangBindingType.java index 43c0062..228e209 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangBindingType.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangBindingType.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangCapabilityID.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangCapabilityID.java index de69628..27fe08f 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangCapabilityID.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangCapabilityID.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangCompileTarget.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangCompileTarget.java index 6ad08ec..a9179d3 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangCompileTarget.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangCompileTarget.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangContainerFormat.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangContainerFormat.java index 8623341..2281cdb 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangContainerFormat.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangContainerFormat.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangCooperativeMatrixUse.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangCooperativeMatrixUse.java index 83c5b0a..411d143 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangCooperativeMatrixUse.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangCooperativeMatrixUse.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangCooperativeVectorMatrixLayout.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangCooperativeVectorMatrixLayout.java index 7022f39..11bec90 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangCooperativeVectorMatrixLayout.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangCooperativeVectorMatrixLayout.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangDebugInfoFormat.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangDebugInfoFormat.java index eed0cf9..2db2d65 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangDebugInfoFormat.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangDebugInfoFormat.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangDebugInfoLevel.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangDebugInfoLevel.java index a46f493..c2faef4 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangDebugInfoLevel.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangDebugInfoLevel.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangDeclKind.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangDeclKind.java index e3584cd..136c635 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangDeclKind.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangDeclKind.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangDiagnosticColor.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangDiagnosticColor.java index 3c34292..667cfa3 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangDiagnosticColor.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangDiagnosticColor.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangEmitCPUMethod.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangEmitCPUMethod.java index 620fb05..dc7b32b 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangEmitCPUMethod.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangEmitCPUMethod.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangEmitSpirvMethod.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangEmitSpirvMethod.java index e5fc680..d8240e4 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangEmitSpirvMethod.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangEmitSpirvMethod.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangFloatingPointMode.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangFloatingPointMode.java index 959f96f..32aef2a 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangFloatingPointMode.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangFloatingPointMode.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangFpDenormalMode.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangFpDenormalMode.java index 60dbb92..8c64fb1 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangFpDenormalMode.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangFpDenormalMode.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangGlobalSessionDesc.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangGlobalSessionDesc.java index cbd7a5d..5bc5e89 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangGlobalSessionDesc.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangGlobalSessionDesc.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangImageFormat.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangImageFormat.java index 1961efe..c0acc16 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangImageFormat.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangImageFormat.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangLanguageVersion.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangLanguageVersion.java index 1a69ab2..00320f0 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangLanguageVersion.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangLanguageVersion.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangLayoutRules.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangLayoutRules.java index 37237cf..69006ea 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangLayoutRules.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangLayoutRules.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangLineDirectiveMode.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangLineDirectiveMode.java index 3409e32..4d23106 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangLineDirectiveMode.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangLineDirectiveMode.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangMatrixLayoutMode.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangMatrixLayoutMode.java index 9f6733c..01c3378 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangMatrixLayoutMode.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangMatrixLayoutMode.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangMiscConstants.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangMiscConstants.java index 0a7501a..87562b8 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangMiscConstants.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangMiscConstants.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; @@ -24,4 +24,15 @@ private SlangMiscConstants() {} public static final int kDefaultTargetFlags = 1024; public static final int kSessionFlags_None = 0; public static final int kInvalidCoverageCounterIndex = -1; + /** + * `SyntheticResourceInfo::arraySize` when the synthetic resource is an + * unbounded (runtime-sized) descriptor array, so the compiler cannot + * know how many descriptors the host will supply. + * + * Spelled the same way as `SLANG_UNBOUNDED_SIZE` (`~size_t(0)`) rather + * than casting it down: both mean "every bit set" in their respective + * widths, but narrowing the 64-bit macro to 32 bits is a truncating + * conversion that MSVC rejects under warnings-as-errors (C4310). + */ + public static final int kUnboundedSyntheticResourceArraySize = -1; } diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangModifierID.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangModifierID.java index 061009e..2226ad2 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangModifierID.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangModifierID.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangOptimizationLevel.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangOptimizationLevel.java index 73d3d8e..0f281be 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangOptimizationLevel.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangOptimizationLevel.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangParameterCategory.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangParameterCategory.java index 1d8899e..8ac57ea 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangParameterCategory.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangParameterCategory.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangPassThrough.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangPassThrough.java index 547533b..397a485 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangPassThrough.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangPassThrough.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangPathType.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangPathType.java index d33b471..ffd600e 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangPathType.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangPathType.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangProfileID.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangProfileID.java index 52ddfe8..79d9e56 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangProfileID.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangProfileID.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangReflectionAPI.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangReflectionAPI.java index e32bc4b..4c4973b 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangReflectionAPI.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangReflectionAPI.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; @@ -232,6 +232,10 @@ private static final class H_spReflectionTypeLayout_GetCategoryCount { static final MethodHandle MH = FfiSupport.downcall("spReflectionTypeLayout_GetCategoryCount", FunctionDescriptor.of(JAVA_INT, ADDRESS)); } + private static final class H_spReflectionTypeLayout_GetContentVarLayout { + static final MethodHandle MH = + FfiSupport.downcall("spReflectionTypeLayout_GetContentVarLayout", FunctionDescriptor.of(ADDRESS, ADDRESS)); + } private static final class H_spReflectionTypeLayout_GetElementStride { static final MethodHandle MH = FfiSupport.downcall("spReflectionTypeLayout_GetElementStride", FunctionDescriptor.of(FfiSupport.C_SIZE_T, ADDRESS, JAVA_INT)); @@ -1153,6 +1157,26 @@ public static int spReflectionTypeLayout_GetCategoryCount(MemorySegment type) { } } + /** + * Get the variable layout for the "content" of a container-like type layout. + * + * The "content" is what a container holds, as opposed to the container ("wrapper") itself: the + * single element for a constant buffer / parameter block / texture buffer, and the sequence of + * elements for a structured buffer. For a constant buffer / parameter block / texture buffer + * this returns the element variable layout, whose offsets are relative to the container (they + * account for the container's own resource usage). For a structured buffer this returns a + * variable layout over an (unbounded) array of the element type at offset zero, so element + * stride and element type can be queried through the normal array-layout accessors. Returns + * null for type layouts that are not container-like. + */ + public static MemorySegment spReflectionTypeLayout_GetContentVarLayout(MemorySegment type) { + try { + return (MemorySegment) H_spReflectionTypeLayout_GetContentVarLayout.MH.invokeExact(type); + } catch (Throwable t) { + throw FfiSupport.rethrow(t); + } + } + /** * Get the stride between elements of an array type layout. * diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangReflectionGenericArgType.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangReflectionGenericArgType.java index 6cdd567..10ec369 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangReflectionGenericArgType.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangReflectionGenericArgType.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangResourceAccess.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangResourceAccess.java index aa8ced3..4503de4 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangResourceAccess.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangResourceAccess.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangResourceShape.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangResourceShape.java index 27a2bf9..d5693fe 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangResourceShape.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangResourceShape.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangScalarType.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangScalarType.java index e1efc64..f98d3c7 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangScalarType.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangScalarType.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangScope.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangScope.java index 579c4e4..2cf77b5 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangScope.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangScope.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangSeverity.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangSeverity.java index 868b671..55f0716 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangSeverity.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangSeverity.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangSourceLanguage.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangSourceLanguage.java index 2641ead..9249d29 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangSourceLanguage.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangSourceLanguage.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangStage.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangStage.java index 3d91bbf..9fd73a7 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangStage.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangStage.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangTerminatedChars.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangTerminatedChars.java index 692c938..daaf9ce 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangTerminatedChars.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangTerminatedChars.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangTypeKind.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangTypeKind.java index 8d83eb5..75e863e 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangTypeKind.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangTypeKind.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangUUID.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangUUID.java index ec9d8db..87ceb2d 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangUUID.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangUUID.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangWarningLevel.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangWarningLevel.java index 9192829..d72596a 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangWarningLevel.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangWarningLevel.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangWriterChannel.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangWriterChannel.java index 73312d1..ac43cc0 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangWriterChannel.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangWriterChannel.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangWriterMode.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangWriterMode.java index a411679..48df924 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangWriterMode.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SlangWriterMode.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SourceLocation.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SourceLocation.java index 1588754..e818aa5 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SourceLocation.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SourceLocation.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SpecializationArg.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SpecializationArg.java index 88b2f0b..52d4830 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SpecializationArg.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SpecializationArg.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SyntheticResourceAccess.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SyntheticResourceAccess.java index bcd0cca..e669e49 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SyntheticResourceAccess.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SyntheticResourceAccess.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SyntheticResourceInfo.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SyntheticResourceInfo.java index 95e0602..c40cefc 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SyntheticResourceInfo.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SyntheticResourceInfo.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; @@ -7,12 +7,12 @@ import static java.lang.foreign.ValueLayout.*; /** - * Layout of C struct {@code SyntheticResourceInfo} (size 56, alignment 8; offsets clang-verified across all supported ABIs). Accessors are static and offset-based, so overlapping union members need no special casing. + * Layout of C struct {@code SyntheticResourceInfo} (size 64, alignment 8; offsets clang-verified across all supported ABIs). Accessors are static and offset-based, so overlapping union members need no special casing. */ public final class SyntheticResourceInfo { private SyntheticResourceInfo() {} - public static final long SIZE = 56; + public static final long SIZE = 64; public static final long ALIGNMENT = 8; public static final long OFFSET_structSize = 0; @@ -27,6 +27,7 @@ private SyntheticResourceInfo() {} public static final long OFFSET_uniformOffset = 40; public static final long OFFSET_uniformStride = 44; public static final long OFFSET_debugName = 48; + public static final long OFFSET_bindlessIndex = 56; /** Allocates one zero-initialized instance. */ public static MemorySegment allocate(Arena arena) { @@ -84,7 +85,23 @@ public static void setBindingType(MemorySegment self, int value) { /** * Number of logical resources in the synthetic binding. Most - * current instrumentation resources are scalar (`1`). + * instrumentation resources are scalar (`1`). + * + * `kUnboundedSyntheticResourceArraySize` when the resource is an + * unbounded descriptor array whose descriptor count is a host + * runtime decision the compiler cannot see -- the coverage buffer + * under `-trace-coverage-bindless-index` is declared this way + * deliberately, so that a shader does not constrain how many + * shaders the host binds alongside it. A host sizing a descriptor + * array must not read this as a count. + * + * For coverage, this sentinel and `bindlessIndex >= 0` are set + * together and always agree, so testing either one identifies the + * bindless form. They are separate fields because they answer + * different questions -- `arraySize` describes the binding's shape + * for any synthetic resource, while `bindlessIndex` says which + * element this shader uses -- and a future synthetic resource + * could be an unbounded array without having a per-shader index. */ public static int getArraySize(MemorySegment self) { return self.get(JAVA_INT, OFFSET_arraySize); @@ -202,4 +219,28 @@ public static void setDebugName(MemorySegment self, MemorySegment value) { self.set(ADDRESS, OFFSET_debugName, value); } + /** + * Index of this shader's element within the synthetic resource's + * descriptor array, or `-1` when the resource is bound as a single + * descriptor rather than as an element of an array. + * + * Coverage sets this from `-trace-coverage-bindless-index`. In that + * form `__slang_coverage` is an unbounded array of buffers, so a + * single `(space, binding)` serves every shader in a pipeline and + * each shader accesses `__slang_coverage[bindlessIndex]`. Reading it + * back here saves a host from having to track the value it passed at + * compile time in order to report on the result. + * + * This field is past the v1 struct size, so it is only written when + * the caller's `structSize` covers it. A caller compiled against an + * older header keeps its own struct layout and never sees it. + */ + public static int getBindlessIndex(MemorySegment self) { + return self.get(JAVA_INT, OFFSET_bindlessIndex); + } + + public static void setBindlessIndex(MemorySegment self, int value) { + self.set(JAVA_INT, OFFSET_bindlessIndex, value); + } + } diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/SyntheticResourceScope.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/SyntheticResourceScope.java index ae4ec88..797eb34 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/SyntheticResourceScope.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/SyntheticResourceScope.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/TargetDesc.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/TargetDesc.java index 3717379..ce30b83 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/TargetDesc.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/TargetDesc.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/VMExecInstHeader.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/VMExecInstHeader.java index 8da9107..400c7be 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/VMExecInstHeader.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/VMExecInstHeader.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/ffi/gen/VMExecOperand.java b/slang/src/main/java/io/github/refux/slang/ffi/gen/VMExecOperand.java index e759d8e..822b13a 100644 --- a/slang/src/main/java/io/github/refux/slang/ffi/gen/VMExecOperand.java +++ b/slang/src/main/java/io/github/refux/slang/ffi/gen/VMExecOperand.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.ffi.gen; diff --git a/slang/src/main/java/io/github/refux/slang/gen/Attribute.java b/slang/src/main/java/io/github/refux/slang/gen/Attribute.java index e63ace0..464f180 100644 --- a/slang/src/main/java/io/github/refux/slang/gen/Attribute.java +++ b/slang/src/main/java/io/github/refux/slang/gen/Attribute.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.gen; diff --git a/slang/src/main/java/io/github/refux/slang/gen/DeclReflection.java b/slang/src/main/java/io/github/refux/slang/gen/DeclReflection.java index 8e49ada..fcbfb98 100644 --- a/slang/src/main/java/io/github/refux/slang/gen/DeclReflection.java +++ b/slang/src/main/java/io/github/refux/slang/gen/DeclReflection.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.gen; diff --git a/slang/src/main/java/io/github/refux/slang/gen/EntryPointReflection.java b/slang/src/main/java/io/github/refux/slang/gen/EntryPointReflection.java index a1f3366..4bccaac 100644 --- a/slang/src/main/java/io/github/refux/slang/gen/EntryPointReflection.java +++ b/slang/src/main/java/io/github/refux/slang/gen/EntryPointReflection.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.gen; diff --git a/slang/src/main/java/io/github/refux/slang/gen/FunctionReflection.java b/slang/src/main/java/io/github/refux/slang/gen/FunctionReflection.java index 57b0c1d..a3c0cd4 100644 --- a/slang/src/main/java/io/github/refux/slang/gen/FunctionReflection.java +++ b/slang/src/main/java/io/github/refux/slang/gen/FunctionReflection.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.gen; diff --git a/slang/src/main/java/io/github/refux/slang/gen/GenericReflection.java b/slang/src/main/java/io/github/refux/slang/gen/GenericReflection.java index 6e17297..e04e027 100644 --- a/slang/src/main/java/io/github/refux/slang/gen/GenericReflection.java +++ b/slang/src/main/java/io/github/refux/slang/gen/GenericReflection.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.gen; diff --git a/slang/src/main/java/io/github/refux/slang/gen/ShaderReflection.java b/slang/src/main/java/io/github/refux/slang/gen/ShaderReflection.java index c1b3963..ca4159a 100644 --- a/slang/src/main/java/io/github/refux/slang/gen/ShaderReflection.java +++ b/slang/src/main/java/io/github/refux/slang/gen/ShaderReflection.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.gen; diff --git a/slang/src/main/java/io/github/refux/slang/gen/TypeLayoutReflection.java b/slang/src/main/java/io/github/refux/slang/gen/TypeLayoutReflection.java index cdf1506..84e3cec 100644 --- a/slang/src/main/java/io/github/refux/slang/gen/TypeLayoutReflection.java +++ b/slang/src/main/java/io/github/refux/slang/gen/TypeLayoutReflection.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.gen; @@ -99,6 +99,12 @@ public io.github.refux.slang.VariableLayoutReflection getContainerVarLayout() { return result.address() == 0 ? null : new io.github.refux.slang.VariableLayoutReflection(result, owner); } + /** Calls {@code spReflectionTypeLayout_GetContentVarLayout}. */ + public io.github.refux.slang.VariableLayoutReflection getContentVarLayout() { + MemorySegment result = SlangReflectionAPI.spReflectionTypeLayout_GetContentVarLayout(self); + return result.address() == 0 ? null : new io.github.refux.slang.VariableLayoutReflection(result, owner); + } + /** Calls {@code spReflectionTypeLayout_getDescriptorSetCount}. */ public long getDescriptorSetCount() { return SlangReflectionAPI.spReflectionTypeLayout_getDescriptorSetCount(self); diff --git a/slang/src/main/java/io/github/refux/slang/gen/TypeParameterReflection.java b/slang/src/main/java/io/github/refux/slang/gen/TypeParameterReflection.java index 01c31ad..f8d2329 100644 --- a/slang/src/main/java/io/github/refux/slang/gen/TypeParameterReflection.java +++ b/slang/src/main/java/io/github/refux/slang/gen/TypeParameterReflection.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.gen; diff --git a/slang/src/main/java/io/github/refux/slang/gen/TypeReflection.java b/slang/src/main/java/io/github/refux/slang/gen/TypeReflection.java index 17d8455..64da79a 100644 --- a/slang/src/main/java/io/github/refux/slang/gen/TypeReflection.java +++ b/slang/src/main/java/io/github/refux/slang/gen/TypeReflection.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.gen; diff --git a/slang/src/main/java/io/github/refux/slang/gen/VariableLayoutReflection.java b/slang/src/main/java/io/github/refux/slang/gen/VariableLayoutReflection.java index 3701b25..402b9df 100644 --- a/slang/src/main/java/io/github/refux/slang/gen/VariableLayoutReflection.java +++ b/slang/src/main/java/io/github/refux/slang/gen/VariableLayoutReflection.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.gen; diff --git a/slang/src/main/java/io/github/refux/slang/gen/VariableReflection.java b/slang/src/main/java/io/github/refux/slang/gen/VariableReflection.java index 92455d2..bf76563 100644 --- a/slang/src/main/java/io/github/refux/slang/gen/VariableReflection.java +++ b/slang/src/main/java/io/github/refux/slang/gen/VariableReflection.java @@ -1,4 +1,4 @@ -// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.16). DO NOT EDIT. +// GENERATED by slang-bindgen from api/slang-api.json (Slang 2026.19). DO NOT EDIT. // Regenerate: see CLAUDE.md / DESIGN.md §9. package io.github.refux.slang.gen; diff --git a/slang/src/main/java/io/github/refux/slang/loader/SlangLibrary.java b/slang/src/main/java/io/github/refux/slang/loader/SlangLibrary.java index 0f32bee..6f4652c 100644 --- a/slang/src/main/java/io/github/refux/slang/loader/SlangLibrary.java +++ b/slang/src/main/java/io/github/refux/slang/loader/SlangLibrary.java @@ -41,7 +41,7 @@ public final class SlangLibrary { * The Slang release this binding is generated against and tested with. Newer libraries are * expected to work (Slang's public ABI is append-only); older ones are not. */ - public static final String PINNED_SLANG_VERSION = "2026.16"; + public static final String PINNED_SLANG_VERSION = "2026.19"; private static final class Holder { static final SlangLibrary INSTANCE = load(); diff --git a/slang/src/test/java/io/github/refux/slang/ModuleIrCompatibilityTest.java b/slang/src/test/java/io/github/refux/slang/ModuleIrCompatibilityTest.java index c971be1..2beca6a 100644 --- a/slang/src/test/java/io/github/refux/slang/ModuleIrCompatibilityTest.java +++ b/slang/src/test/java/io/github/refux/slang/ModuleIrCompatibilityTest.java @@ -1,27 +1,39 @@ package io.github.refux.slang; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assumptions.assumeTrue; +import static org.junit.jupiter.api.Assertions.fail; +import io.github.refux.slang.ffi.SlangNative; import java.io.IOException; import java.io.InputStream; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; import org.junit.jupiter.api.Test; /** * Covers loading serialized module IR across Slang versions. * - *

The case that matters: Slang aborts the process when {@code loadModuleFromIRBlob} is - * handed IR whose module version it does not read — no exception, no diagnostic, no {@code hs_err}. - * So {@link Session#loadModuleFromIr} must decide compatibility before the bytes reach native code. - * Without that, any consumer accepting IR built elsewhere (a plug-in, a cache written by another - * toolchain) can be killed outright by a stale artifact. + *

The case that matters: Slang releases before 2026.18.3 abort the process when + * {@code loadModuleFromIRBlob} is handed IR whose module version they do not read — no exception, + * no diagnostic, no {@code hs_err}. So {@link Session#loadModuleFromIr} decides compatibility before + * the bytes reach native code. Without that, any consumer accepting IR built elsewhere (a plug-in, + * a cache written by another toolchain) can be killed outright by a stale artifact. Newer releases + * report the mismatch instead, and the same check keeps the failure one actionable exception. * *

{@code fixtures/legacy_probe.slang-module} is a trivial module serialized by Slang 2026.8 - * (module version 15), checked in so the mismatch is reproducible without installing an old - * compiler. Tests needing a mismatch skip when run against a build that reads version 15. + * (module version 15, serialization format 1), checked in so a stale artifact is reproducible + * without installing an old compiler. Slang 2026.18.3 retired format 1 altogether, so against the + * pinned release it is the retired-format case: not even its metadata is readable. + * + *

The cross-version cases are forged instead: no released Slang writes format 2 at any module + * version but 32, so {@link #withModuleVersion} relabels self-serialized IR. That is enough for + * what is under test — Slang decides whether to load from the version field, before reading the + * module itself. */ class ModuleIrCompatibilityTest { @@ -43,16 +55,61 @@ private static Session spirvSession(GlobalSession global) { return global.newSession().target(CompileTarget.SPIRV).create(); } - /** The version query must survive IR the loader would abort on — that is the whole point of it. */ + /** + * {@code ir} relabelled as module {@code version}. The serialized metadata holds the version as + * one little-endian 64-bit field; it is found by patching each 8-byte run that holds the + * current version and asking {@link Session#moduleInfo} which patch it reports back. + */ + private static byte[] withModuleVersion(Session session, byte[] ir, long version) { + long current = session.moduleInfo(ir).moduleVersion(); + ByteBuffer original = ByteBuffer.wrap(ir).order(ByteOrder.LITTLE_ENDIAN); + for (int at = 0; at + Long.BYTES <= ir.length; at++) { + if (original.getLong(at) != current) { + continue; + } + byte[] patched = ir.clone(); + ByteBuffer.wrap(patched).order(ByteOrder.LITTLE_ENDIAN).putLong(at, version); + try { + if (session.moduleInfo(patched).moduleVersion() == version) { + return patched; + } + } catch (SlangException notTheVersionField) { + // These 8 bytes held something else; keep looking. + } + } + return fail("no 64-bit module version field in serialized IR: the metadata layout changed, so " + + "withModuleVersion needs another way to forge a version"); + } + + /** The version query reads what readable IR declares about itself, without loading it. */ @Test - void moduleInfoReadsForeignIrWithoutLoadingIt() throws IOException { + void moduleInfoReadsWhatSerializedIrDeclares() { try (GlobalSession global = Slang.createGlobalSession(); Session session = spirvSession(global)) { - ModuleInfo info = session.moduleInfo(legacyIr()); + byte[] ir = session.loadModuleFromSource("round_trip_probe", PROBE_SOURCE) + .serialize(); + + ModuleInfo info = session.moduleInfo(ir); - assertEquals("legacy_probe", info.name()); - assertEquals("2026.8", info.compilerVersion(), "fixture was built by slangc 2026.8"); - assertEquals(15, info.moduleVersion(), "Slang 2026.8 emits module version 15"); + assertEquals("round_trip_probe", info.name()); + assertNotNull(info.compilerVersion()); + assertFalse(info.compilerVersion().isBlank(), "the writing compiler is recorded"); + } + } + + /** + * A retired serialization format must fail as a distinct, catchable result — the one + * {@link Session#loadModuleFromIr} turns into its actionable message — never as an abort. + */ + @Test + void moduleInfoRefusesARetiredSerializationFormat() throws IOException { + try (GlobalSession global = Slang.createGlobalSession(); + Session session = spirvSession(global)) { + byte[] legacy = legacyIr(); + + SlangException thrown = assertThrows(SlangException.class, () -> session.moduleInfo(legacy)); + + assertEquals(SlangNative.SLANG_E_NOT_AVAILABLE, thrown.result(), thrown.getMessage()); } } @@ -84,6 +141,66 @@ void selfSerializedIrStillLoads() { } } + /** + * Which versions load is Slang's call, not the binding's: a version older than the one this + * build writes loads when Slang still reads it. Against the pinned 2026.19, which writes 32 and + * reads 31 through 32, that is version 31 — which the exact-version check refused before. + */ + @Test + void olderModuleVersionSlangStillReadsLoads() { + try (GlobalSession global = Slang.createGlobalSession(); + Session session = spirvSession(global)) { + byte[] ir = session.loadModuleFromSource("round_trip_probe", PROBE_SOURCE) + .serialize(); + byte[] older = withModuleVersion(session, ir, global.supportedModuleVersion() - 1); + + assertNotNull(session.loadModuleFromIr("older", older)); + } + } + + /** + * A version Slang does not read — newer than this build, or older than its range — is refused + * as an exception that says what to do, never an abort. + */ + @Test + void moduleVersionSlangDoesNotReadThrows() { + try (GlobalSession global = Slang.createGlobalSession(); + Session session = spirvSession(global)) { + byte[] ir = session.loadModuleFromSource("round_trip_probe", PROBE_SOURCE) + .serialize(); + + for (long version : new long[] {global.supportedModuleVersion() + 1, 1}) { + byte[] forged = withModuleVersion(session, ir, version); + + SlangCompileException thrown = + assertThrows(SlangCompileException.class, () -> session.loadModuleFromIr("forged", forged)); + + assertTrue(thrown.getMessage().contains("round_trip_probe"), thrown.getMessage()); + assertTrue(thrown.getMessage().contains("module version " + version), thrown.getMessage()); + assertTrue(thrown.getMessage().contains("Recompile it from source"), thrown.getMessage()); + } + } + } + + /** + * Deferring to Slang is only safe where Slang reports what it cannot read, which the build tag + * decides; anything that is not a release number must fall back to the exact-version check. + */ + @Test + void onlyTrustsReleasesThatReportUnreadableIr() { + for (String tag : new String[] {"2026.18.3", "2026.19", "v2026.19", "2026.19-12-gdeadbee", "2027.1"}) { + assertTrue(GlobalSession.releasedAtLeast(tag, 2026, 18, 3), tag); + } + for (String tag : new String[] {"2026.18.2", "2026.18", "2026.9", "2025.30", "0.0.0-unknown", "unknown", ""}) { + assertFalse(GlobalSession.releasedAtLeast(tag, 2026, 18, 3), tag); + } + assertFalse(GlobalSession.releasedAtLeast(null, 2026, 18, 3)); + + try (GlobalSession global = Slang.createGlobalSession()) { + assertTrue(global.validatesModuleIrOnLoad(), "the pinned release reports unreadable IR"); + } + } + /** * The regression: before the pre-check this call took the JVM down with it, so a failure here * is a dead test JVM rather than a red test. @@ -93,28 +210,25 @@ void incompatibleIrThrowsInsteadOfAbortingTheProcess() throws IOException { try (GlobalSession global = Slang.createGlobalSession(); Session session = spirvSession(global)) { byte[] legacy = legacyIr(); - assumeTrue( - global.supportedModuleVersion() - != session.moduleInfo(legacy).moduleVersion(), - "this Slang build reads the fixture's module version, so there is no mismatch to test"); SlangCompileException thrown = assertThrows(SlangCompileException.class, () -> session.loadModuleFromIr("legacy_probe", legacy)); - // The message has to be actionable: which module, which versions, and what to do. + // The message has to be actionable: which module, and what to do. assertTrue(thrown.getMessage().contains("legacy_probe"), thrown.getMessage()); - assertTrue(thrown.getMessage().contains("2026.8"), thrown.getMessage()); assertTrue(thrown.getMessage().contains("Recompile it from source"), thrown.getMessage()); } } - /** Garbage must fail as an exception too, not as an abort. */ + /** Garbage must fail as an exception too, not as an abort — and not pass for a retired format. */ @Test void nonModuleBytesThrow() { try (GlobalSession global = Slang.createGlobalSession(); Session session = spirvSession(global)) { assertThrows(SlangException.class, () -> session.moduleInfo(new byte[0])); - assertThrows(SlangException.class, () -> session.moduleInfo("not a slang module".getBytes())); + SlangException garbage = + assertThrows(SlangException.class, () -> session.moduleInfo("not a slang module".getBytes())); + assertNotEquals(SlangNative.SLANG_E_NOT_AVAILABLE, garbage.result()); } } }