summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2021-10-11Support for GL_NV_ray_tracing_motion_blur vk extension (#1964)jsmall-nvidia
* #include an absolute path didn't work - because paths were taken to always be relative. * Upgrade to GLSLANG 11.16.0+ * Small edit to readme - really to kick another build. * Upgrade slang-binaries to include new glslang binaries. * Update slang-binaries to include linux-x86 * Upgrade slang-binaries. * Support for GL_NV_ray_tracing_motion_blur extension.
2021-10-09Upgrade to GLSLANG 11.16.0+ (#1962)jsmall-nvidia
* #include an absolute path didn't work - because paths were taken to always be relative. * Upgrade to GLSLANG 11.16.0+ * Small edit to readme - really to kick another build. * Upgrade slang-binaries to include new glslang binaries. * Update slang-binaries to include linux-x86 * Upgrade slang-binaries.
2021-10-09Small improvements for premake linking on linux (#1958)jsmall-nvidia
* #include an absolute path didn't work - because paths were taken to always be relative. * Small improvements to premake for linux around linking. * Link with pthread of slang-glslang.
2021-10-09Disable swiftshader temporarily (#1971)jsmall-nvidia
* #include an absolute path didn't work - because paths were taken to always be relative. * Temporarily disable swiftshader.
2021-10-08Basic VK buffer barrier test (#1967)Kai Yao
* Allow specifying entry point name in gfx unit test util * Add buffer barrier test
2021-10-08Hotfix/reenable vk test (#1969)jsmall-nvidia
* #include an absolute path didn't work - because paths were taken to always be relative. * Reenable erroneously disabled test.
2021-10-07Return diagnostics data when encountering module load error by exception (#1966)Kai Yao
2021-10-07Disable test crashing CI (#1965)jsmall-nvidia
* #include an absolute path didn't work - because paths were taken to always be relative. * Disable test that appears to be crashing.
2021-10-04Modified barrier API to accept multiple resources per call (#1959)Kai Yao
Co-authored-by: Yong He <yonghe@outlook.com>
2021-10-04Removing exceptions from core/compiler-core (#1953)jsmall-nvidia
* #include an absolute path didn't work - because paths were taken to always be relative. * Refactor Stream. Working on all tests. * Split out CharEncode. * Make method names lower camel. m_prefix in Writer/Reader * Tidy up around CharEncode interface. * Small improvements around encode/decode. * Better use of types. * Remove readLine from TextReader. * Remove exceptions from Stream/Text handling. * Fix some typos. * Fix tabbing. * Fix missing override. * Remove remaining exception throw/catch via using signal mechanism. * Remove exceptions that are not used anymore. * Document the Stream interface. * Remove index for decoding 'get byte' function. * Fix CharReader -> ByteReader.
2021-10-04Get native handles for TextureResource and BufferResource (#1960)lucy96chen
* Added getNativeHandle() to TextureResource and BufferResource; Implemented getNativeHandle() in Vulkan and D3D12; Added new unit test files for the aforementioned implementation * Added missing getNativeHandle() implementations to renderer-shared.cpp and CUDA * Finished new getNativeHandle() unit tests for ITextureResource and IBufferResource; Modified ICommandQueue and ICommandBuffer unit tests to call QueryInterface to convert to IUnknown then back and compare resulting pointers for equality * Unit tests updated and pass locally * Cast m_buffer.m_buffer and m_image to uint64_t
2021-10-01Add getNativeHandle() to ICommandQueue and ICommandBuffer (#1952)lucy96chen
* Added support for getting command buffer and command queue handles to ICommandBuffer and ICommandQueue; D3D12Device, VkDevice, and DebugDevice modifieid to implement this new functionality; immediate-renderer-base.cpp also modified to implement the new functions * Removed excess boilerplate * Changed readRef() to get() in D3D12 getNativeHandle() implementation for ICommandBuffer and ICommandQueue * Added unit tests for new getNativeHandle() implementations, unfinished * Queue test added; Minor cleanup changes * getBufferHandleTestImpl() now closes the command buffer before returning * Added getNativeHandle() implementations to CUDADevice * Added comment clarifying that the Vulkan check is checking for a null handle, which is defined to be 0
2021-09-30VK Resource Barrier (#1955)Kai Yao
* Resource barrier API and VK implementation * Stub implementations * Handle VK Acceleration Structure flag * Add a couple more cases to pipeline barrier stages
2021-09-30Fix aarch64 build on github (#1957)Yong He
Co-authored-by: Yong He <yhe@nvidia.com>
2021-09-30Fix GitHub release (#1956)Yong He
* Fix aarch64 release build config. * Fix for WinAarch64 build. * Update premake for embed-std-lib build on aarch64. * `platform` fix for aarach64 build. * Try revert back to use absolute output path for slang-stdlib-generated.h * Fix * fix Co-authored-by: Yong He <yhe@nvidia.com>
2021-09-29Fix ARM64 detection for MSVC (#1951)Chad Engler
2021-09-29Add ISession::loadModuleFromSource. (#1950)Yong He
Co-authored-by: Yong He <yhe@nvidia.com>
2021-09-28Fix AbortCompilationException leaking through loadModule API. (#1949)Yong He
* Fix AbortCompilationException leaking through loadModule API. * Update. * Fix. Co-authored-by: Yong He <yhe@nvidia.com>
2021-09-28Improvements to the unit test framework. (#1948)Yong He
2021-09-24Add existing device handle support unit test (#1946)lucy96chen
2021-09-24Move existing unit tests to a standalone dll. (#1945)Yong He
2021-09-23Add method to retrieve native handles (#1944)lucy96chen
* Added a getNativeHandle() method that retrieves the natively created handles; Modified RendererBase, VKDevice, D3D12Device, and DebugDevice to implement this new method * Moved ExistingDeviceHandles out of Desc directly inside IDevice and renamed to NativeHandles; Modified calls accessing the struct accordingly in RendererBase, DebugDevice, VKDevice, and D3D12Device * Minor cleanup changes (renames, etc.)
2021-09-22Add gfx unit testing framework. (#1943)Yong He
* Add gfx unit testing framework. * Fix compilation error. * Reset gfxDebugCallback after render_test. * Pass enabledApi flags through. * Fix for code review suggestions. Co-authored-by: Yong He <yhe@nvidia.com>
2021-09-21Support for existing device/instance handles in Vulkan (#1942)lucy96chen
2021-09-15Allow D3D12Device to use an existing device handle (#1940)lucy96chen
* Added a new field for an existing device handle to IDevice::Desc; Modified D3D12Device::initialize to set the device stored in desc if it already exists instead of creating a new one * Turned existingDeviceHandle into a struct containing an array of two elements; Updated D3D12Device::initialize to match changes to existingDeviceHandle; Updated comments * Fixed style error for ExistingDeviceHandles struct
2021-09-15Fix incorrect WIN32 macros and missing Windows.h inclusion (#1939)Pablo Delgado
* Replace WIN32 preprocessor macros with _WIN32 * Add missing Windows.h include for InterlockedIncrement
2021-09-14Avoid upcasting to f32 in 16bit float-uint bit cast. (#1938)Yong He
Co-authored-by: Yong He <yhe@nvidia.com>
2021-09-14Bring heterogeneous-hello-world back up to date. (#1935)David Siher
* Bring heterogeneous-hello-world back up to date. * Reintroduced heterogeneous-hello-world into the premake * No longer uses compiled bytecode for entry point, instead a loadModule call is hardocoded with the slang file name. * Entry point is, similarly, hardcoded for now. * Added a bypass to slang-legalize-types for an unneeded GPUForeach check * Run premake and change to relative path * Removed experimental and added README Co-authored-by: Yong He <yonghe@outlook.com>
2021-09-13Fix a crash in gfx d3d TransientHeap implementation. (#1937)Yong He
Co-authored-by: Yong He <yhe@nvidia.com>
2021-09-13Bug fix in 16bit type emit, vk validation error fix. (#1936)Yong He
+ Implement bit_cast between float16 and uint16 in GLSL. + Enable pack-any-value-16bit test on vk. Co-authored-by: Yong He <yhe@nvidia.com>
2021-09-10First Slang LLVM integration (#1934)jsmall-nvidia
* #include an absolute path didn't work - because paths were taken to always be relative. * First integration with 'slang-llvm'. * Fix project. * Fix test output. * First pass assert support. * Add inline impls for min and max. * Add abs inline abs impl for llvm. * Make abs not use ternary op * Fix typo in slang-llvm.h * Sundary fixes to make remaining tests using llvm backend pass.
2021-09-09`reinterpret` and 16-bit value packing. (#1933)Yong He
* `reinterpret` and 16-bit value packing. * Update `half-texture` cross-compile test reference result. * Revert inadvertent reformatting of slang-ir-inst-defs.h Co-authored-by: Yong He <yhe@nvidia.com>
2021-09-09Fix `spSetDumpIntermediates`. (#1931)Yong He
2021-09-08Fix return code bug in createTypeConformance (#1930)Yong He
Co-authored-by: Yong He <yhe@nvidia.com>
2021-09-03Fix crash: dynamic dispatch of generic interface method. (#1929)Yong He
* Fix crash: dynamic dispatch of generic interface method. * Fix memory error. Co-authored-by: Yong He <yhe@nvidia.com>
2021-09-02Two small fixes. (#1928)Theresa Foley
* Fix mangling logic for the case where a symbol name contains characters that aren't permitted (this usually occurs when a module name consists of the actual path to the module). There were multiple early-out `if` cases that accidentally fell through to the fallback path, so that symbol names would end up being excessively long. * Fix type conversion cost lookup cache, by allowing single-element vectors (e.g., `vector<float,1>`) and single row/column matrix types to be distinguished from types of lower rank. Previously, `float` and `float1` and `float1x1` would share a single cache entry, even though each (currently) has very different conversion rules.
2021-09-01Bug fix for createDynamicObject (#1927)Yong He
Co-authored-by: Yong He <yhe@nvidia.com>
2021-09-01Improving glslang -O1 passes (#1926)jsmall-nvidia
* #include an absolute path didn't work - because paths were taken to always be relative. * Improve passes used for -O1 option with glslang. * Set sourceManager when serializing container.
2021-08-26Add API to control interface specialization. (#1925)Yong He
2021-08-25Add `createDynamicObject` stdlib function. (#1923)Yong He
This function takes a user provided `typeID` and arbitrary typed value, and turns them into an existential value whose `witnessTableID` is `typeID` and whose `anyValue` is the user provided value. This allows the users to pack the runtime type id info in arbitrary way.
2021-08-23Bug fix for optix SBT access (#1922)Nathan V. Morrical
* optix SBT record data can now be accessed using uniform parameters on ray tracing entry points * Update slang-emit.cpp * fixing a bug where SBT instruction was missing a location at which to insert. Switching back to emitFieldExtract and accounting for changes in instruction emission location
2021-08-17Add GLSL450 intrinsics to SPIRV direct emit. (#1921)Yong He
* Add GLSL450 intrinsics to SPIRV direct emit. * Fix. * Fix compiler error. * Fix. * Fix compiler error. * Make direct-spirv tests actually run.
2021-08-12Further implementation of SPIRV direct emit. (#1920)Yong He
* Further implementation of SPIRV direct emit. This change implements: - Struct, Vector, Matrix and Unsized Array types. - Basic arithmetic opcodes, vector construct, swizzle etc. - getElementPtr, getElement, fieldAddress, extractField. - SPIRV target intrinsics with SPIRV asm code in stdlib. - RWStructuredBuffer and StructuredBuffer. - Pointer storage class propagation. - Control flow. * Fix.
2021-08-11Handle unexpected character in mangled names (#1919)Theresa Foley
This change is related to a case where a user saw a `/` character printed as part of a structure field name in output HLSL (which obviously broke downstream compilation). The root cause in that case was that a module that was `import`ed was found via a file system directory path, and thus the module name that the Slang compiler formed included a `/`. Due to other factors the structure field was emitted based on its mangled name (missing name hint), and that meant the bare `/` escaped into the output. That situation implies some other things maybe are questionable: * Could we have avoided a `/` ending up in the module name to begin with? Maybe, but we kind of want to support non-ASCII characters in names in the long run. * Could we have fixed whatever was causing the name hint to be dropped? Maybe, but we don't ever want name hints to be *required* for valid compilation (hence why they are "hints"). Even if we investigate these other issues, it is important that the name mangling scheme only ever produce output that uses a constrained subset of ASCII that we expect most compilation targets can support (GLSL being an annoying outlier because of its rules around `_`). This change adds a path where when mangling a `Name` as part of a mangled symbol name we check for the presence of bytes that aren't allowed and then produce an escaped form instead if needed. Note that the code is still byte-oriented for now aothough in the long-run it might want to be oriented around Unicode code points or extended grapheme clusters.
2021-08-11Fix a few issues around opaque types as outputs (#1918)Theresa Foley
* Fix a few issues around opaque types as outputs Slang and HLSL support opaque types (textures, buffers, samplers, etc.) as members of `struct`s, mutable local variables, function results, and `out`/`inout` parameters. GLSL and SPIR-V do not. In order to translate Slang code over to GLSL/SPIR-V we use a variety of passes that seek to eliminate all of the above use cases and produce code that only uses opaque types in the limited ways that GLSL/SPIR-V allow. This change relates to the passes that deal with function results and `out`/`inout` parameters. There are two basic changes here: 1. The `specializeResourceOutputs` pass was only dealing with resource (texture/buffer) types. This change updates it to process sampler types as well. 2. The sequencing of the passes made it possible that an opaque-typed local variable might be left around after `specializeResourceOutputs`, which would mean the code is still invalid for GLSL/SPIR-V. This change adds an additional SSA-formation pass which would eliminate any opaque-type local variables whose lifetimes were made simple enough by the optimizations. Together these changes fix a problem-case user shader that was failing to compile for Vulkan. * Update slang-emit.cpp Fix typo 'reuslt' * Update slang-emit.cpp Comment change to re-trigger CI build. Co-authored-by: jsmall-nvidia <jsmall@nvidia.com>
2021-08-10Enable reading OptiX SBT records via uniform parameters on ray tracing entry ↵Nathan V. Morrical
points (#1917) * optix SBT record data can now be accessed using uniform parameters on ray tracing entry points * Update slang-emit.cpp
2021-07-29Improvements around glslang optimization (#1916)jsmall-nvidia
* #include an absolute path didn't work - because paths were taken to always be relative. * Improvements to how glslang optimizations are handled. Increasing the amount of ids to allow for optimizing more complex shaders, and compacting to try and keep ids within range for usage. * Add other optimizations from current glslang. * Improved -O1/default GLSLANG passes improves output SPIR-V size (Can be more that 1/3 of the size), for a modest increase in compilation time. * Improve comments.
2021-07-28Experimental DXR1.0 support in gfx. (#1915)Yong He
* Experimental DXR1.0 support in gfx. - Add `dispatchRays` command. - Add `createRayTracingPipelineState` method to construct a D3D ray tracing state object from a linked slang program and user specified shader table. Limitations/simplifications: no local root signature support, shader table entries contains only shader identifiers and is specified at pipeline creation time, owned by the pipeline state object. * Root object binding for raytracing pipelines. * `maybeSpecializePipeline` implementation for raytracing pipelines. * Add ray-tracing-pipeline example. * Fixes. * Update README.md * Update comments on the lifespan of specialized pipelines Co-authored-by: Yong He <yhe@nvidia.com> Co-authored-by: jsmall-nvidia <jsmall@nvidia.com>
2021-07-21Work to mitigate SPIR-V bloat (#1914)Theresa Foley
* Work to mitigate SPIR-V bloat SPIR-V is not an especially compact format, but some patterns in how Slang generates code and then runs it through `spirv-opt` lead to many redundant field-by-field copy operations being emitted. This change attempts to address some of the resulting bloat from the Slang side of things. Note: experimentation shows that the bloat is less pronounced when running either *no* SPIR-V optimizations or *full* SPIR-V optimizations, so it is also likely that the bloat should be addressed by changing which `spirv-opt` passes the Slang compiler runs in default (`-O1`) builds. Such changes should come as a distinct pull request. This change primarily does two things: First, the code generation strategy for passing arguments to `out` and `inout` parameters has been changed. In the past, the compiler would *always* copy the argument value into a temporary, then pass the address of the temporary, and then write back the value after the call. The new code generation strategy attempts to identify when an argument value already has a simple address in memory and passes that address directly when possible. This eliminates many copy operations that occur before/after calls to functions with `out`/`inout` parameters. Second, we introduce an IR optimization pass that detects call sites where the entire contents of a buffer (usually a constant buffer) is being passed to a callee function, such that many bytes are loaded and then passed even if only very few are used in the callee. The pass moves the load operations from the caller to a specialized version of the the callee where possible (e.g., when the constant buffer in question is a global shader parameter). Doing this eliminates another major category of copies. Notes: * The IR lowering logic is complicated by the fact that several kinds of l-values (values that are usable as the desitnation of assignment, or for `out`/`inout` arguments) are not actually addressable. An easy example is a non-contiguous swizzle like `v.xwz` on a `float4`, where the value occupies 12 bytes, but not 12 consecutive bytes with a single address. There are many more corner cases like that and the IR lowering pass carries a lot of complexity to deal with them. A more systematic overhaul is due some time soon. * The IR representation of `out` and `inout` parameters deserves some careful scrutiny when making these kinds of changes. The official semantics of `inout` in HLSL has been "copy in copy out" (and `out` is just "copy out") which is observably different from any solution that passes in the address of an l-value directly. By making this change we are saying that Slang's semantics are not precisely those of legacy HLSL, and that our semantics for `inout` parameters are closer to those of `inout` in Swift or of a mutable borrow in Rust. In the Swift case the implementation can freely pass the underlying storage of an l-value or the address of a temporary, and valid programs may not observe the different. It is thus illegal to observe the value in a storage local while a mutation to that location is "in flight." All of this is way more detailed and technical than 99% of Slang users will ever care about, but importantly it gives us semantic cover to eliminate these copies in the IR, and also to emit output C++ code that implements `out` and `inout` as by-reference parameter passing. * There was an exsting generic pass for specializing functions based on call sites that uses a "template method" style of pattern to customize its behavior. That pass needed to be generalized to handle this use case because it had previously operated on the assumption that the "desire" to specialize a callee function must be driven by the parameter declarations of that function, and not on the argument values passed in. The code has been slightly refactored to allow the policy for specialization to consider both parameters and arguments. * Unsurprisingly, a bunch of the GLSL (and thus SPIR-V) generated has changed with this work, so several baseline `.slang.glsl` files needed to be updated. * This change is incomplete in that it does not address broader cases of buffer loads, including both partial loads from constant buffers (just loading one field, but a field that uses a "large" structure type), and loads from multi-element buffers (a lot from a structured buffer where the element type is "large"). The main question in each of those cases is how to define how "large" a structure needs to be before we decide to try and sink loads into callee functions like this. In the worst case, sinking loads in this way may actually create *more* memory traffic (because the same values get loaded in multiple callee functions). * fixup: run premake * fixup: typo
2021-07-20Option to build all slang-repro in a directory (#1911)jsmall-nvidia
* #include an absolute path didn't work - because paths were taken to always be relative. * Add repro-directory feature. * Added writer support to repro-directory. * Upgrade glslang to 11.5.0 * Add -load-repro-directory option * Improve repro doc.