summaryrefslogtreecommitdiff
path: root/tests/bugs
AgeCommit message (Collapse)Author
2024-06-20Disambiguate int type matrix multiply (#4425)Jay Kwak
Closes #4414
2024-06-13Implement for metal `SV_GroupIndex` (#4385)ArielG-NV
* Implement for metal `SV_GroupIndex` 1. If we don't have `sv_GroupThreadId` available we create one using `SV_GroupIndex`s location data. 2. We emit code emulating `sv_GroupThreadId` from the same logic that CUDA/CPP uses. * address most review comments Addressed all but two: [1](https://github.com/shader-slang/slang/pull/4385#discussion_r1639058473) and [2](https://github.com/shader-slang/slang/pull/4385#issuecomment-2166934855) I want to enable tests and be sure there is no bugs using CI before I redesign the code so I have a working fallback. * address comment, enable tests enable now functioning tests due to `SV_GroupIndex` working with metal * syntax error with groupThreadID search did `= param` instead of `= i.param` * add `sv_groupid` for test + test fixes * disable test that won't work regardless
2024-06-13Metal: misc fixes and enable more tests. (#4374)Yong He
* Fix and enable tests for metal. * Fix. * Fix. * Fix tests. * Fix warnings. * Fix. --------- Co-authored-by: Yong He <yonghe@Yongs-Mac-mini.local>
2024-06-13SPIR-V `SV_InstanceId` support in pixel shader (#4368)ArielG-NV
* solve issue by making 'non SV for SPIRV' system semantics, no longer an SV once diagnosed by slang Problem: 1. SV_InstanceID (HLSL) is allowed as an output semantic with HLSL, it is also allowed for input into pixel shader. We need to account for multiple entry points in 1 file using both of these scenarios at once. 2. SPIRV does not allow `SV_InstanceID` as a builtin, `SV_InstanceID` must be passed as a regular `flat` `Input` from vertex shader. Solution: Slang needs to treat these SV objects as non built-in's. As a result: 1. Slang needs to allocate for vertex output and fragment Input binding slots for all SV_InstanceID uses (if the target is SPIRV). This allows Slang to prepare an open slot to bind these SV objects to. 2. Slang needs to not emit built in modifier for these not actual built in variables (under the specific circumstances described). note: `VarLayout` was made not `HOISTABLE` since I don't believe it needs to be `HOISTABLE`. * The code can be made to work even if `VarLayout` is `HOISTABLE`. * fix compile warnings * address review comments and reimplement operand removal 1. remove an operand by selectively copying operands 2. test to ensure `Flat` is in the test shaders * we do not need to manually add `Flat` in the code since this is done for us in emit-spirv. This is the behavior since `uint` on a fragment `Input` must be `Flat`, else it is a VK validation error. * address review remove clone logic * address review remove unused function reserve instead of setCount with ShortList
2024-06-12Capability System: Implicit capability upgrade warning/error (#4241)ArielG-NV
* capability upgrade warning/error adjusted implementation + tests to support a warning/error if capabilities are implicitly upgraded and test accordingly. * add glsl profile caps * add GLSL and HLSL capabilities to the associated capability * syntax error in capdef * only error if user explicitly enables capabilities 1. changed testing infrastructure to not set a `profile` explicitly, 2. Added tests to be sure this works as intended with user API and with slangc command line * Change capability atom definitions and how Slang manages them to fix errors 1. most `glsl_spirv` version atoms have been removed from `.capdef`, instead we will translate `spirv` version atoms into `glsl_spirv` since there is no point in writing the same code twice in `.capdef` files to define `spirv` versions. 2. add spirv version, and hlsl sm version (and equivlent) capability dependencies 3. removed some stage requirments which were set on objects, keep the wrapper capabilities. I am keeping the wrapper capabilities since I am unaware on if there are stage limitations (spec says code in practice does not work). * check internal version instead of version profile (_spirv_1_5 vs. spirv_1_5) * remove unused OpCapability. adjust SPIRV version'ing again for glsl_spirv * apply workaround for glslang bug with rayquery usage * ensure capabilities targetted by a profile and added together by a user are valid * remove additions to `spirv_1_*` wrapper * spirv_* -> glsl_spirv fix * fix bug where incompatable profiles would cause invalid target caps * try to avoid joining invalid capabilities * fix the warning/error & printing * run through tests to fix capability system and test mistakes many mistakes were mesh shaders doing `-profile glsl_450+spirv_1_4`. This is not allowed for a few reasons 1. the test tooling does not handle arguments the same as `slangc` 2. glsl_450 core profile does not support mesh shaders, nor does spirv_1_4. sm_6_5 does work in this senario * set some sm_4_1 intrinsics to sm_4_0 * replace `GLSL_` defs with `glsl_` * swap the unsupported render-test syntax for working syntax * set d3d11/d3d12 profile defaults this is required since sm version changes compiled code & behavior * adjusted nvapi capabilities with atomics + d3d11 set to use sm_5_0 as per default * cleanup * address review * incorrect styling * change `bitscanForward` to work as intended on 32 bit targets --------- Co-authored-by: Yong He <yonghe@outlook.com>
2024-06-12Fix incorrect drop of decoration when translating glsl global var to ↵Yong He
entrypoint param. (#4353)
2024-06-12Fix crash on invalid entrypoint varying parameter. (#4349)Yong He
* Fix crash on invalid entrypoint varying parameter. * Fix test.
2024-06-11Fix crash when using optional type in a generic. (#4341)Yong He
2024-06-10Address glslang ordering requirments for 'derivative_group_*NV' (#4323)ArielG-NV
* Address glslang ordering requirments for 'derivative_group_*NV' fixes: #4305 The solution is to emit some `layout`s after a module source is emitted. Added to slangs gfx backend code to enable the compute shader derivative extension for testing purposes. * address review * enable removed test --------- Co-authored-by: Yong He <yonghe@outlook.com>
2024-06-10enable more metal tests (#4326)skallweitNV
2024-06-08SPIRV `Block` decoration fixes. (#4303)Yong He
* SPIRV `Block` decoration fixes. - SPIRV does not allow duplicate `Block` decorations. So we shouldn't be generating them. - Also fixes duplication of OpName. - SPIRV and HLSL do not allow ConstantBuffer with trailing unsized arrays. Added a check in the front-end against such code. * Convert failing cross-compile tests to filecheck. --------- Co-authored-by: Jay Kwak <82421531+jkwak-work@users.noreply.github.com>
2024-06-07Metal compute tests (#4292)skallweitNV
2024-06-01Prevent hoisting of non-hoistable instructions in non-function values with ↵Ellie Hermaszewska
code (#4250)
2024-05-24If no sample is set with a `Texture(.*)MS[]` operation, set sample to 0. (#4225)ArielG-NV
* push fix: if no sample, set to 0 for textureMS * push fixes to hlsl [] operator + test so it will error
2024-05-15Add diagnostic to prevent defining unsized variables. (#4168)Yong He
* Add diagnostic to prevent defining unsized static variables. * Fix tests. * Add more tests. * Fix to allow defining variables of link-time size. * update diagnostic message. * Fix tests. * Simplify code.
2024-05-14Slang: Support UTF-8 with Byte Order Markers (#4135)cheneym2
Slang APIs are documented as taking UTF-8 encoded shader source, though it's not explicitly documented whether it is allowed to include a BOM (Byte Order Marker). This change adds support for UTF-8 BOM markers by virtue of disposing of BOM data. As a bonus, UTF-16 input which can cleanly decode to UTF-8 is now also accepted. Throwing out the BOM on input is done by leveraging existing functionality in "determineEncoding()", however a bug exists there for null-terminated single character input, where the null byte caused a heuristic to guess UTF-16, even though the null byte isn't part of the string. The bug in "determineEncoding" is fixed by only guessing when bytes >= 2 and not looking past the end of the buffer. The 'implicit-cast' test was mistakenly relying on the bug to pass, as its expected file was being read as UTF16 and cropped to zero length due to the bug. The expected output of implicit-cast is updated to pass with the bug fix in place. The decoding of UTF-16 to UTF-8 is done through an existing 'decode' method. This change fixes a bug in UTF16-LE 'decode' where it was decoded as if it were Big-Endian. Adds 3 small tests to ensure the compiler doesn't choke on source files in UTF-8 (with BOM), UTF16-LE, or UTF16-BE. Bonus: Fixes a bug in diagnostic reporting where hex values were incorrectly translated to text, leading to incorrect, possibly truncated strings. Fixes #4046 Co-authored-by: Yong He <yonghe@outlook.com>
2024-05-08Fix NonUniformResourceIndex legalization for SPIRV. (#4133)Yong He
* Fix NonUniformResourceIndex legalization for SPIRV. * Update gh-4131.slang
2024-05-07Make sure pointer local vars have `AliasedPointer` decoration. (#4132)Yong He
2024-05-01Fix compile failures when using debug symbol. (#4069)Yong He
* Fix compile failures when using debug symbol. * Various fixes. * Fix intrinsic. * Fix test.
2024-04-28Add variable pointers to render-test-vk and a related failing test-case (#4041)ArielG-NV
* add variable pointers to render-test-vk and failing (but ignored with workarounds) test-case
2024-04-26WIP: Force Inline If RefType (#4005)ArielG-NV
* Force Inline if reftype Fixes #3997. If we are using a refType, we now ForceInline. remarks: 1. Modifications were made in slang-ir-glsl-legalize to change how we translate GlobalParam proxy's into GlobalParam. a. We now handle the senario where a globalParam is used in multiple disjoint blocks (like 2 different functions). * try to figure out why CI fails but local works try to inline DispatchMesh, works locally, may fail on CI(?) * try another fix * add task tests + don't allow semi-early task-shader inline Task shader uses DispatchMesh which is a very big 'hack' where we check for the function name and modify the callees in very large ways. This function does inline, but it cannot inline early due to future mangling that this operation requires todo. This is reflected with the `[noRefInline]` modifier. It is a modifier so users may stop mandatory inlines with `__ref` parameter.
2024-04-25Fix unpackUnorm4x8 and unpackSnorm4x8 (#4033)Jay Kwak
Fixes #4031 Each component of unpackU/Snorm4x8 had to be masked for 8bits.
2024-04-25Keep const-ness in generic functions (#4028)Jay Kwak
* Keep const-ness in generic functions Closes #3834 The issue was that "const" variables inside of generic functions became non-const variables. This issue prevented some of GLSL texture functions from being called inside of generic functions. When `propagateConstExpr()` iterates the global functions, the generic functions had to be handled little differently. This commit allows the iteration to happen for the generic functions. * Adding an explantion of the test as a comment
2024-04-24Avoid DXC warnings for missing bitwise op parantheses (#4004)Jay Kwak
Resolves #3980 Based on the operator precedence, Slang may omits the parentheses if they are not needed. DXC prints warnings for such cases and some applications may treat the warnings as errors. This commit emits parentheses to avoid the DXC warning even when they are not needed.
2024-04-19Initial pass to add capability declarations to stdlib intrinsics. (#3912)ArielG-NV
2024-04-19Support arithmetics on generic arguments (#3968)Jay Kwak
Resovles an issue #3935 Slang had to fold the generic arguments after specialization.
2024-04-17commit to partially fix #3931 (#3972)ArielG-NV
2024-04-12Fix IR lowering bug of do-while loops. (#3941)Yong He
2024-03-27Fix incorrect SPV stride for unsized array (#3837)kaizhangNV
* Fix incorrect SPV stride for unsized array (#3825) In '-emit-spirv-directly' mode, slang generates the stride 0 for unsized array in `OpDecorate` instructions. For unsized array, the stride is invalid, but we need to provide a non-zero value to pass the spirv validator. * Decorate struct with unsized array field as 'Block' For the struct having unsized array fields, it has to be decorated as "Block", otherwise it will fails the spirv-val. So we add a check at in 'emitGlobalInst' when emitting spirv for 'kIROp_StructType', where if there is unsized array field inside the struct, emit a decorate instruction for above purpose. * Update decoration for kIROp_SizeAndAlignmentDecoration When add a decoration node for kIROp_SizeAndAlignmentDecoration, we implicitly convert the 64 bit size to 32 bit. In most cases, this should not be a problem because we won't have that large data type. However, we use 64-bit -1 to represent the size of unsized-array, so in that case, the conversion will change the size to 0, which is incorrect. So change that decoration to use 64-bit size. --------- Co-authored-by: Yong He <yonghe@outlook.com>
2024-03-27Allow var/param names to be the same as type name. (#3850)Yong He
2024-03-27Fix lookup to prevent finding `typedef` itself. (#3848)Yong He
2024-03-26Support mutable existential parameters. (#3836)Yong He
* Support mutable existential parameters. * Update test.
2024-03-26Fix the sign-extending issue in right shift (#3820)kaizhangNV
Fix issue (#3637). In constant folding of a right shift operation,slang always uses signed interger as the operand no matter the input source code is signed or unsigned, this could causes sign-extending issue if the input source is unsigned integer with highest bit set to 1. Fix the issue by checking the original type of the input and use the unsigned type if the input is unsigned.
2024-03-23Make `-no-mangle` option work, add `-no-hlsl-binding`. (#3817)Yong He
2024-03-21Diagnose cyclic references in inheritance graph. (#3811)Yong He
2024-03-20Fix namespace parsing. (#3803)Yong He
* Fix namespace parsing. * Fix.
2024-03-20Change representation of float literal in language translation (#3798)kaizhangNV
* Change representation of float literal in language translation Fix the issue (#3490). Previous implementation could zero out the very small float literal. We now use scientific notation instead to represent the float numbers whose exponential part are larger than a threshold. In other cases, keep using fixed notation. --------- Co-authored-by: Yong He <yonghe@outlook.com>
2024-03-19Fix type checking for constructors in generic interfaces. (#3799)Yong He
2024-03-19Fix regression on pointer address space handling. (#3797)Yong He
2024-03-18Check cyclic types after specialization. (#3791)Yong He
2024-03-18Check for cylic types. (#3790)Yong He
2024-03-18Fix SPIRV for mesh shaders, checks for invalid target code&recursion. (#3788)Yong He
* Fix #3780. * Fixers #3781. * Add test for #3781. * Diagnose error on unsupported builtin intrinsic types. * Add check for recursion. * Fix. * Fix. * Fix recursion detection. * Fix. * Fix. * Fix recursion logic. * More fix.
2024-03-10Fix crash when trying to constant fold non-existent call. (#3728)Yong He
2024-02-28Allow non-static const to be considered compile-time constant. (#3645)Yong He
2024-02-21Fix parsing of literals in stdlib. (#3610)Yong He
* Fix parsing of literals in stdlib. * Fix double lit limits.
2024-02-21Fix SPIRV lowering issue. (#3608)Yong He
* Fix SPIRV pointer lowering issue. Fixes #3605. * Add another pointer test. Fixes #3601. * Fixes #3600. * Fix #3595.
2024-02-02Capability type checking. (#3530)Yong He
* Capability type checking. * Fix. --------- Co-authored-by: Yong He <yhe@nvidia.com>
2024-01-24[SPIRV] Support `globallycoherent` and `[vk::index()]`. (#3488)Yong He
* [SPIRV] Support `globallycoherent` modifier. * Fix. * Disable executable cooperative vector tests. * Update expected failure. * [SPIRV] Emit varying output index decoration. * Add test. * Update tests. * Fix test. * Emit `SpvExecutionModeEarlyFragmentTests`. * Lower `StructuredBuffer<bool>`. * Support globallycoherent on ByteAddressBuffer. --------- Co-authored-by: Yong He <yhe@nvidia.com>
2024-01-09Fix funcs w/ buffer load being treated as readnone. (#3441)Yong He
Co-authored-by: Yong He <yhe@nvidia.com>
2023-12-13Fix GLSL static initialization bug. (#3409)Yong He
* Fix GLSL static initialization bug. Fixes #3408. * Update comment. * Fold global var initializer as an expression if possible. --------- Co-authored-by: Yong He <yhe@nvidia.com>