summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-10-15 18:54:16 -0700
committerGitHub <noreply@github.com>2024-10-15 18:54:16 -0700
commitc97166aed29e0a224d49cec0b12503d1a10b52e0 (patch)
tree1894ff8a3b608d66f55f5f2bd47640e679e59e78 /tools
parent99a242eca78149a61c0521d319e96ededec7168d (diff)
Fix type checking on generic extensions. (#5316)
Add fcpw library to test suite.
Diffstat (limited to 'tools')
-rw-r--r--tools/slang-unit-test/unit-test-fcpw-compile.cpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/tools/slang-unit-test/unit-test-fcpw-compile.cpp b/tools/slang-unit-test/unit-test-fcpw-compile.cpp
new file mode 100644
index 000000000..5e57ea55c
--- /dev/null
+++ b/tools/slang-unit-test/unit-test-fcpw-compile.cpp
@@ -0,0 +1,59 @@
+// unit-test-fcpw-compile.cpp
+
+#include "slang.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "tools/unit-test/slang-unit-test.h"
+#include "slang-com-ptr.h"
+#include "../../source/core/slang-io.h"
+#include "../../source/core/slang-process.h"
+
+using namespace Slang;
+
+// A test that uses the COM API to load and compile the FCPW library written by
+// Rohan Sawhney, shader code in MIT license.
+// https://github.com/rohan-sawhney/fcpw
+//
+SLANG_UNIT_TEST(fcpwCompile)
+{
+ ComPtr<slang::IGlobalSession> globalSession;
+ SLANG_CHECK(slang_createGlobalSession(SLANG_API_VERSION, globalSession.writeRef()) == SLANG_OK);
+ slang::TargetDesc targetDesc = {};
+ targetDesc.format = SLANG_SPIRV;
+ targetDesc.profile = globalSession->findProfile("spirv_1_5");
+ slang::SessionDesc sessionDesc = {};
+ sessionDesc.targetCount = 1;
+ sessionDesc.targets = &targetDesc;
+ sessionDesc.preprocessorMacroCount = 1;
+ slang::PreprocessorMacroDesc macroDesc = {};
+ macroDesc.name = "_BVH_TYPE";
+ macroDesc.value = "2";
+ sessionDesc.preprocessorMacros = &macroDesc;
+ ComPtr<slang::ISession> session;
+ SLANG_CHECK(globalSession->createSession(sessionDesc, session.writeRef()) == SLANG_OK);
+
+ ComPtr<slang::IBlob> diagnosticBlob;
+ auto module = session->loadModule("tests/fcpw/bvh-traversal.cs.slang", diagnosticBlob.writeRef());
+ SLANG_CHECK(module != nullptr);
+
+ ComPtr<slang::IEntryPoint> entryPoint;
+ module->findEntryPointByName("rayIntersection", entryPoint.writeRef());
+ SLANG_CHECK(entryPoint != nullptr);
+
+ ComPtr<slang::IComponentType> compositeProgram;
+ slang::IComponentType* components[] = { module, entryPoint.get() };
+ session->createCompositeComponentType(components, 2, compositeProgram.writeRef(), diagnosticBlob.writeRef());
+ SLANG_CHECK(compositeProgram != nullptr);
+
+ ComPtr<slang::IComponentType> linkedProgram;
+ compositeProgram->link(linkedProgram.writeRef(), diagnosticBlob.writeRef());
+ SLANG_CHECK(linkedProgram != nullptr);
+
+ ComPtr<slang::IBlob> code;
+ linkedProgram->getEntryPointCode(0, 0, code.writeRef(), diagnosticBlob.writeRef());
+ SLANG_CHECK(code != nullptr);
+ SLANG_CHECK(code->getBufferSize() != 0);
+}
+