summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcheneym2 <acheney@nvidia.com>2024-10-09 14:42:13 -0400
committerGitHub <noreply@github.com>2024-10-09 14:42:13 -0400
commit1bbc421a663bd494cc1a4dd097852553049cc1d5 (patch)
tree1cfc71191af7d75b440c45334dfb904e78bd75dc
parent8b2bd3c8ac1d365b872d02db6b03d082f132646b (diff)
Fix precompiled glsl modules (#5230)
When precompiling modules defined with glsl, it's necessary to link in the glsl definition module. Reuse the public fillRequirements declaration
-rw-r--r--source/slang/slang-check-impl.h4
-rw-r--r--source/slang/slang-compiler-tu.cpp3
-rw-r--r--tests/library/precompiled-glsl.slang30
3 files changed, 37 insertions, 0 deletions
diff --git a/source/slang/slang-check-impl.h b/source/slang/slang-check-impl.h
index 63c16e6d2..2f3eae0c5 100644
--- a/source/slang/slang-check-impl.h
+++ b/source/slang/slang-check-impl.h
@@ -38,6 +38,10 @@ namespace Slang
bool isUniformParameterType(Type* type);
+ /// Create a new component type based on `inComponentType`, but with all its requiremetns filled.
+ RefPtr<ComponentType> fillRequirements(
+ ComponentType* inComponentType);
+
Type* checkProperType(
Linkage* linkage,
TypeExp typeExp,
diff --git a/source/slang/slang-compiler-tu.cpp b/source/slang/slang-compiler-tu.cpp
index 8ae06a419..49595117d 100644
--- a/source/slang/slang-compiler-tu.cpp
+++ b/source/slang/slang-compiler-tu.cpp
@@ -6,6 +6,7 @@
#include "slang-ir-insts.h"
#include "slang-ir-util.h"
#include "slang-capability.h"
+#include "slang-check-impl.h"
namespace Slang
{
@@ -117,6 +118,8 @@ namespace Slang
linkage,
allComponentTypes);
+ composite = fillRequirements(composite);
+
TargetProgram tp(composite, targetReq);
tp.getOrCreateLayout(&sink);
Slang::Index const entryPointCount = m_entryPoints.getCount();
diff --git a/tests/library/precompiled-glsl.slang b/tests/library/precompiled-glsl.slang
new file mode 100644
index 000000000..f8a8ae58e
--- /dev/null
+++ b/tests/library/precompiled-glsl.slang
@@ -0,0 +1,30 @@
+// precompiled-glsl.slang
+
+// A test that precompiles a slang-module using GLSL functions.
+
+//TEST:COMPILE: tests/library/precompiled-glsl.slang -target spirv -stage fragment -entry main
+//TEST:COMPILE: tests/library/precompiled-glsl.slang -target spirv -stage fragment -entry main -embed-downstream-ir
+
+#version 310 es
+precision highp float;
+precision highp int;
+
+public vec3 func(vec3 v)
+{
+ return v;
+}
+
+layout(location = 0) out mediump vec4 dEQP_FragColor;
+
+layout(location = 0) flat in uint out0;
+layout(binding = 0, std140) uniform Reference
+{
+ uint out0;
+} ref;
+
+void main()
+{
+ dEQP_FragColor = mix(vec4(0.0, 1.0, 0.0, 1.0),
+ vec4(0.0, 1.0, 0.0, 1.0),
+ vec4(0.0, 1.0, 0.0, 1.0));
+}