summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2024-06-13Fix cuda/cpp/metal crash for when using GLSL style shader inputs (#4378)ArielG-NV
Decorations were not expected as an input, this causes a crash.
2024-06-12Implement Sampler2D for CPP target (#4371)Jay Kwak
Closes #4267 Co-authored-by: Yong He <yonghe@outlook.com>
2024-06-12Enable full test on macos. (#4327)Yong He
* Enable full test on macos. * Add failing test to expected list. * Fix CI script. * Update expected failure list. * Update test list.
2024-06-12Delete glsl_vulkan and glsl_vulkan_one_desc targets. (#4361)Yong He
2024-06-12Fix emit logic for getElementPtr. (#4362)Yong He
* Fix emit logic for getElementPtr. * Legalize `getElementPtr(vector, id)` for metal. * Fix compiler error. * Fix warnings. * Fix test. * Fix.
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-12Add constant folding for % operator. (#4359)Yong He
2024-06-12Fix merge error. (#4358)Yong He
2024-06-12Add slangc flag to `-zero-initialize` all variables (#3987)ArielG-NV
* Default (zero'd) values with `-zero-initialize` flag Adds `-zero-initialize` flag to set values to a __default() expression if they are missing a initExpr. * address review and ensure __default calls ctor + zero's fields. 1. We must keep zero-initialize in SemanticsDeclHeaderVisitor. This is done because else a ctor will be initialized before we can set struct fields to `__default`. 2. IRDefaultCtorDecoration was added to track default ctor's with parent struct. 3. ParentAggTypeModifier was added to track ChildOfStruct->IRType for sharing data such as with functions. This is required to ensure we associate a lowered function with a lowered struct type * Removed decoration to track defaultCtor in favor of field. This was done since decorations are checked for IR objects, storing auxillary info does not work here as a result if usable object. * address some review comments Since `IDefaultInitializable` is taking a considerabley larger amount of time than anticipated I am pushing some of the other fixes requested. I did not remove the "IRStruct storing a default Ctor" hack yet. mostly renamed/adjusted tests to work as intended added test to ensure we don't synthisize a junk `= 0` when not in `zero initialize` mode removed member in favor of sharedContext+dictionary. * a working but incorrect impl * default init without any IR hacks (fully working aside from generic/containored-types) * Finish zero init code 1. IDefaultInitializer interface was added. If conforming, your type may be zero-initialized. To Conform a `__init()` is required 2. `[OnlyAutoInitIfForced]` was added. This attribute states that a default initializer should only be implicitly called if forced by the compiler (`zero-initialize` for example). This allows types which implicitly/explicitly conform to IDefaultInitialize to have optional auto-init behavior (which is Slang's default for user structs) to be disabled. * note about `[OnlyAutoInitIfForced]`. This is required for std-lib to not automatically resolve init-expressions for std-lib, but it has the added benifit of allowing user made structs/classes to control the default behavior of initializing * fix ErrType assumption * testing why dx12 fails local but passes CI * push vector changes to generic test * push syntax adjustment, still figuring out what is wrong with cuda. * remove debug changes & adjust style * fix field-init expressions with structs initializers don't init a static in a ctor. This would be illegal code and wrong code (init list in lower-to-ir) * minor adjustments temporarily while the rest of the issue is discussed * fix * implement IDefaultInitializable * remove a unneeded whitespace change * fix type checking error should be checking if a valid type is `Type`, not `BasicExpressionType` * needs to be DeclRefType, not Type * fix langguage server error * change findinheritance for correctness + cleanup * remove return false verified the issue was `findInheritance` * push attempt at language server fix * still trying to fix inheritance * added extension support, remove redundant code Did not address all review comments yet, want to see if CI also passes my changes * undo a change which caused CI to fail * change logic + DefaultConstructExpr setup code to use defaultConstructExpr when possible to construct a default without overhead of invoke/related also changed code so parent's defaultInitializable propegates to derived member * 1. fix error in `isSubtype` 2. add flag to isSubtype `subtypeInheritanceIsNotFullyResolved` was added since we may not be done the lookup stage but still require `isSubtype` checking to verify usage of inheritance while working with inheritance. In This case we will just skip `ensureLookup` and "caching" (since we don't have a cache invalidation system, nor need) * fix bug in logic + add test to better catch the bug * address comment + isSubTypeOption + wrapper type test, * fix wrong code adjustment I checked on the CI and realized I caused a failure, mistake was made not negating some code * syntax, class naming capital * remove stdlib default initialize changes, replace with `__default()` for init * remove redundant code + fix defaultConstruct emitting previously defaultConstruct emitting was crashing due to having generics unresolved. By not resolving the default construct immediately, everything works. * remove a coment * add test to ensure static variables dont `init` inside a struct's `__init` * fix Ptr members breaking struct use * address review and add -zero-initialize test `-zero-initialize` test was added to be sure debug pointers are not broken with default init values --------- Co-authored-by: Yong He <yonghe@outlook.com>
2024-06-12Extend the COM-based API to support whole program compilation. (#4355)Yong He
2024-06-12Add compiler option to treat enum types as unscoped. (#4354)Yong He
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-12Implicit register binding for hlsl to non-hlsl targets (#4338)ArielG-NV
* implicit register binding for hlsl to non-hlsl targets * fix regressions only warn once with `_maybeDiagnoseMissingVulkanLayoutModifier` remove unneeded else * address review and change bindings address review comments on testing to make the tests indiscriminate over order of code emitted. Change bindings to 1:1 map to vulkan bindings * don't set bindings 1:1 with vulkan if command line option was added --------- Co-authored-by: Yong He <yonghe@outlook.com>
2024-06-12Fix duplicate SPIRV decorations. (#4346)Yong He
* Fix duplicate `DescriptorSet` decorations. * Fix duplicate `Block` decoration.
2024-06-12Add option to preserve shader parameter declaration in output SPIRV. (#4344)Yong He
* Add option to preserve shader parameter declarations in output. * Add test.
2024-06-11Fix crash when using optional type in a generic. (#4341)Yong He
2024-06-11Fix global value inlining for spirv_asm blocks. (#4339)Yong He
2024-06-11[gfx] Metal improvements (#4337)skallweitNV
* fix binding resources for render pass * compute vertex buffer binding offset based on root layout * fix result code * cleanup * implement readTextureResource * more getNativeHandle --------- Co-authored-by: Yong He <yonghe@outlook.com>
2024-06-11SPIRV backend: add support for tessellation stages, (#4336)Yong He
2024-06-11Test more texture types in Metal (#4333)Jay Kwak
This commit adds testing for Metal texture functions with the following six types that the document says supported: - float - half - int32_t - uint32_t - int16_t - uint16_t Co-authored-by: Yong He <yonghe@outlook.com>
2024-06-11[gfx] Metal texture fixes (#4331)skallweitNV
2024-06-11Support integer typed textures for GLSL (#4329)Jay Kwak
* Support integer typed textures for GLSL This commit re-enables the ability to sample from an integer typed texture for GLSL functions while keeping it unavailable for HLSL target.
2024-06-11Remove duplicate `VkPhysicalDeviceComputeShaderDerivativesFeaturesNV` ↵ArielG-NV
extension structure in vk-api.h (#4335)
2024-06-11Fix `GetAttributeAtVertex` for spirv and glsl targets. (#4334)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-10Partial implementation of static_assert (#4294)Jay Kwak
* Error out for types not supported by texture sample functions This commit prints errors with a new keyword, `static_assert`, when the given texture type is not supported for the target. * Moving the check to linkAndOptimizeIR after specialization is done * Remove unnecessary change * Adding test * Remove kIROp_StaticAssert once processed * Do not remove StaticAssert because it is needed for the next specialization * Remove after iteration of child is done --------- Co-authored-by: Yong He <yonghe@outlook.com>
2024-06-10enable more metal tests (#4326)skallweitNV
2024-06-10Fix SPIRV emit for `Flat` decoration and TessLevel builtin. (#4318)Yong He
2024-06-10Support all integer typed indices in StructuredBuffer Load/Store/[]. (#4311)Yong He
* Support all integer typed indices in StructuredBuffer Load/Store/[]. * Fix tests. --------- Co-authored-by: Jay Kwak <82421531+jkwak-work@users.noreply.github.com>
2024-06-10[gfx] Metal graphics support (#4324)skallweitNV
* fix double semicolons * fix another double semicolon * wait for init data upload * remove obsolete setData * refactor swapchain to work on virtual back buffers * buffer/texture use breakable device reference * refactor input layout * create render command encoder * add todo * refactor framebuffer layout * refactor framebuffer * refactor shader program * translatePrimitiveType * add more translate functions * refactor framebuffer * refactor render pass * implement graphics pipeline state * add depth stencil state * initial render command encoder support * comment
2024-06-10Fix typos in the docs (#4322)Anders Leino
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-08Add initial draft auto-diff basics and IR overview documents (#4216)Sai Praveen Bangaru
2024-06-08Disallow certain types of decls in `interface` to provide better diagnostic ↵Yong He
message. (#4312)
2024-06-08Metal system value overhaul. (#4308)Yong He
2024-06-07Adding functional test for GLSL texture functions (#4306)Jay Kwak
This commit adds a functional test to GLSL texture functions. It appears that the testing frameworkd doesn't work for combined sampler for "shadow" and "buffer".
2024-06-07Support HLSL `.mips` syntax. (#4310)Yong He
2024-06-07Small SPIRV emit cleanup around vector element extract. (#4309)Yong He
2024-06-07Make CTS failure report more obvious (#4302)kaizhangNV
2024-06-07Improve documentation and example formatting consistency (#4299)Matthew Moulton
* Improve doc and example consistency Improve consistency of formatting in example shaders and remove trailing spaces in documentation files. Fix minor typos.
2024-06-07Precompute UIntSet from individual capabilities inside generator (#4269)ArielG-NV
* fixes: #4163 Precompute UIntSet from individual capabilities inside generator (removes intermediate form of capabilities). note: 1. I still expand capabilities which are missing `target` and `stage` atoms. * fix compile warning<->error with clang * address review preallocate the pregenerated UIntSet's * disable incorrect warning of 'unreachable code' The warning is wrong since, when `out` has 0 elements (does not start `for` loop), the `return` is reached. * fix clang warnings 1. use unsigned long for the buffer serializer 2. braces around scalar init * address review added work around to avoid warning with `for(...) return; return;` pattern `else if constexpr` addition instead of cascading blocks * push fix for use of `_BitScanForward` * cleanup * move around assert for proper checking * syntax error * use SLANG_ASSERT instead of assert * test for why SLANG_ASSERT caused CI to fail with linux-arm builds * test if `SLANG_ASSERT` really is causing a build issue for linux-arm
2024-06-07Metal compute tests (#4292)skallweitNV
2024-06-06Fixed profile string per request in pr#4268 (#4297)Hai Nguyen
Changed profile string from glsl_440 to spirv_1_5 per request in pr#4268.
2024-06-06Update capability-generator-main.cpp (#4295)ArielG-NV
fixes: #4293 Currently the code does: ``` void inclusiveJoinConjunction(CapabilitySharedContext& context, CapabilityConjunction& c, List<CapabilityConjunction>& toAddAfter) { if (c.isImpossible()) return; for (auto& conjunction : conjunctions) { if (c.implies(conjunction)) return; } ``` This is incorrect because it means that "if the set we are going to add is a super set of an element, don't add it". This does not make sense since inclusive join is meant to be 'additive' of super sets. Correct behavior code: ``` void inclusiveJoinConjunction(CapabilitySharedContext& context, CapabilityConjunction& c, List<CapabilityConjunction>& toAddAfter) { if (c.isImpossible()) return; for (auto& conjunction : conjunctions) { if (conjunction.implies(c)) return; } ``` This is correct behavior because it means that: "if the set we are going to add is a sub set of an element, ignore it". This makes sense since inclusive join can then add super sets in-place of subsets
2024-06-06Typo in 06-interfaces-generics.md (#4284)Elie Michel
Co-authored-by: Jay Kwak <82421531+jkwak-work@users.noreply.github.com>
2024-06-06Fix build warnings and treat warnings as error on CI (#4276)Jay Kwak
* Fix build warnings and treat warnings as error
2024-06-06Remove unnecessary call to __requireComputeDerivative (#4283)Jay Kwak
* Remove unnecessary call to __requireComputeDerivative When SPIR-V uses operators whose name has a keyword, "Implicit", they require calling a function "__requireComputeDerivative()". When it uses "Explicit", the function doesn't need to be called.
2024-06-06work on gfx metal backend (#4287)skallweitNV
* implement sampler state * implement input layout * implement fence object * buffer implementation * texture implementation * cleanup * add adapter enumeration * supported formats and allocation info * work on device and implement readBufferResource * skeleton for transient resource heap * initial work on command queue / buffers / encoders * fix uploading initial buffer data * implement buffer resource view * string utility functions * wip query pool implementation * cleanup * swapchain * wip * remove plain buffer view * extend gfxGetDeviceTypeName with metal * basic support for resource binding with compute shaders * needed for metal bindings * replace assert(0) with SLANG_UNIMPLEMENTED_X
2024-06-06Fix python syntax highlighting in slangpy chapter (#4282)Elie Michel