From d6dd38f5210fedfd96ff088ef9b8a2424c79c4f0 Mon Sep 17 00:00:00 2001 From: Ellie Hermaszewska Date: Tue, 11 Apr 2023 23:28:58 +0800 Subject: Implement FileCheck tests for several test commands (#2747) * Add missing expected.txt for test * Diagnostics -> StdWriters in render test * Allow specifying several test prefixes to run `slang-test -- tests/foo tests/bar` * Squash warnings in some tests * Enable gfx debug layer in gfx test util Makes this issue present consistently: https://github.com/shader-slang/slang/issues/2766 * Allow DebugDevice to return interfaces instantiated by the debugged object * Check that we actaully have a shader cache for shader cache tests * Implement FileCheck tests for several test commands - SIMPLE, SIMPLE_EX - SIMPLE_LINE - REFLECTION, CPU_REFLECTION - CROSS_COMPILE It does not currently support the render tests or the COMPARE_COMPUTE commands It is invoked by adding `(filecheck=MY_FILECHECK_PREFIX)` to the test command, for example TEST:CROSS_COMPILE(filecheck=SPIRV): -target spirv-assembly * Move LLVM FileCheck interface to slang-llvm * Neaten slang-test tests * Refine handling of expected output in slang-test * Add example FileCheck buffer test * Add cuda-kernel-export tests Which were waiting on FileCheck * Bump vs project files * Make createLLVMFileCheck_V1 return a void* rather than specifically an IFileCheck * Remove use of CharSlice from filecheck interface * Bump slang-llvm version --------- Co-authored-by: jsmall-nvidia --- source/compiler-core/slang-artifact.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'source/compiler-core/slang-artifact.h') diff --git a/source/compiler-core/slang-artifact.h b/source/compiler-core/slang-artifact.h index 80db717d0..6072cdf76 100644 --- a/source/compiler-core/slang-artifact.h +++ b/source/compiler-core/slang-artifact.h @@ -5,6 +5,8 @@ #include "../core/slang-basic.h" #include "../../slang-com-helper.h" +#include + namespace Slang { @@ -47,7 +49,9 @@ struct CharSlice : public Slice explicit CharSlice(const char* in) :Super(in, ::strlen(in)) {} CharSlice(const char* in, Count inCount) :Super(in, inCount) {} CharSlice() :Super(nullptr, 0) {} + explicit CharSlice(const String& s) :CharSlice(s.begin(), s.getLength()){}; }; +static_assert(std::is_trivially_copyable_v); struct TerminatedCharSlice : public CharSlice { @@ -64,6 +68,7 @@ struct TerminatedCharSlice : public CharSlice TerminatedCharSlice(const char* in, Count inCount) :Super(in, inCount) { SLANG_ASSERT(in[inCount] == 0); } TerminatedCharSlice() :Super("", 0) {} }; +static_assert(std::is_trivially_copyable_v); /* As a rule of thumb, if we can define some aspect in a hierarchy then we should do so at the highest level. If some aspect can apply to multiple items identically we move that to a separate enum. -- cgit v1.2.3