From b39ec87cccaadebbb9325dd2adb8c0b13b364805 Mon Sep 17 00:00:00 2001 From: sricker-nvidia <115114531+sricker-nvidia@users.noreply.github.com> Date: Thu, 15 May 2025 17:01:08 -0700 Subject: Fix broken -emit-spirv-via-glsl test option (#7091) Fixes issue #6898 The -emit-spirv-via-glsl slang-test option has been broken for some amount of time. Tests that were using it were operating as if using -emit-spirv-directly, leading to many duplicated tests. After fixing the test option, there were an number of errors that appeared as a result. This change fixes the broken test option and the resulting test errors. Some of the test errors revealed some legitimate issues, such as: -The GLSL bitCount instrinsic only supports 32-bit integers and requires emulation for other bit widths. -Emitting GLSL 8-bit and 16-bit glsl integer types did not emit the proper extension requirements -Emitting GLSL and casting for 16-bit integers was missing a closing parenthesis. -Missing profile for GL_EXT_shader_explicit_arithmetic_types -Missing toType cases for UInt8/Int8 for the kIROp_BitCast case in tryEmitInstExprImpl. --- tools/render-test/slang-support.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'tools/render-test') diff --git a/tools/render-test/slang-support.cpp b/tools/render-test/slang-support.cpp index 2f39ed078..f98372330 100644 --- a/tools/render-test/slang-support.cpp +++ b/tools/render-test/slang-support.cpp @@ -194,6 +194,22 @@ static SlangResult _compileProgramImpl( else sessionTargetDesc.flags = 0; + { + slang::CompilerOptionEntry entry; + entry.value.kind = slang::CompilerOptionValueKind::Int; + if (options.generateSPIRVDirectly) + { + entry.name = slang::CompilerOptionName::EmitSpirvDirectly; + entry.value.intValue0 = int(options.generateSPIRVDirectly); + } + else + { + entry.name = slang::CompilerOptionName::EmitSpirvViaGLSL; + entry.value.intValue0 = int(!options.generateSPIRVDirectly); + } + sessionOptionEntries.add(entry); + } + // Not expecting argument parsing to have added any targets SLANG_ASSERT(sessionDesc.targetCount == 0); sessionDesc.targetCount = 1; -- cgit v1.2.3