From 4323a15708cafa6411ec10ef8fefb736f8bda82c Mon Sep 17 00:00:00 2001 From: Theresa Foley Date: Wed, 11 Aug 2021 11:00:16 -0700 Subject: Fix a few issues around opaque types as outputs (#1918) * 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 --- source/slang/slang-ir-specialize-resources.cpp | 3 +++ 1 file changed, 3 insertions(+) (limited to 'source/slang/slang-ir-specialize-resources.cpp') diff --git a/source/slang/slang-ir-specialize-resources.cpp b/source/slang/slang-ir-specialize-resources.cpp index 00357ca50..09db3391f 100644 --- a/source/slang/slang-ir-specialize-resources.cpp +++ b/source/slang/slang-ir-specialize-resources.cpp @@ -342,6 +342,9 @@ struct ResourceOutputSpecializationPass if(as(type)) return true; + if(as(type)) + return true; + // TODO: more cases here? return false; -- cgit v1.2.3