Revision 4323a15708cafa6411ec10ef8fefb736f8bda82c authored by Theresa Foley on 11 August 2021, 18:00:16 UTC, committed by GitHub on 11 August 2021, 18:00:16 UTC
* 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>
1 parent 08e36dd
Raw File
test.bat
@echo off
setlocal
pushd %~dp0

:: Argument parsing loop, for arguments that we need to handle at the .bat level

:ARGLOOP

if "%1"=="-debug" (
	set SLANG_TEST_CONFIG=Debug
	shift
	goto :ARGLOOP
)
if "%1"=="-release" (
	set SLANG_TEST_CONFIG=Release
	shift
	goto :ARGLOOP
)
if "%1"=="-platform" (
	set SLANG_TEST_PLATFORM=%2
	shift
	shift
	goto :ARGLOOP
)
if "%1"=="-configuration" (
	set SLANG_TEST_CONFIG=%2
	shift
	shift
	goto :ARGLOOP
)

:: When done with arguments, we'll just fall through here




:: Set root directory to the directory where `test.bat` resides
:: (which should be the root of the source tree)
SET "SLANG_TEST_ROOT=%~dp0"

:: If  platform and configuration haven't been set, then set
:: them to default values.
IF "%SLANG_TEST_PLATFORM%" == "" ( SET "SLANG_TEST_PLATFORM=x86" )
IF "%SLANG_TEST_CONFIG%" == "" ( SET "SLANG_TEST_CONFIG=Debug" )

:: If the user specified a platform of "Win32" swap that to "x86"
:: to match how we are generating our output directories.
IF "%SLANG_TEST_PLATFORM%"=="Win32" ( Set "SLANG_TEST_PLATFORM=x86" )

:: Establish the directory where the binaries to be tested reside
set "SLANG_TEST_BIN_DIR=%SLANG_TEST_ROOT%bin\windows-%SLANG_TEST_PLATFORM%\%SLANG_TEST_CONFIG%\"

:: ensure that any built tools are visible
SET "PATH=%PATH%;%SLANG_TEST_BIN_DIR%"

:: TODO: Maybe we should actually invoke `msbuild` to make sure all the code is up to date?

"%SLANG_TEST_BIN_DIR%slang-test.exe" -bindir "%SLANG_TEST_BIN_DIR%\" %*
back to top