summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/slang/slang-ir-inst-defs.h2
-rw-r--r--source/slang/slang-ir-use-uninitialized-values.cpp3
-rw-r--r--tests/diagnostics/uninitialized-globals.slang41
3 files changed, 40 insertions, 6 deletions
diff --git a/source/slang/slang-ir-inst-defs.h b/source/slang/slang-ir-inst-defs.h
index 9899feba1..74cb534f9 100644
--- a/source/slang/slang-ir-inst-defs.h
+++ b/source/slang/slang-ir-inst-defs.h
@@ -903,7 +903,7 @@ INST_RANGE(BindingQuery, GetRegisterIndex, GetRegisterSpace)
INST(AlwaysFoldIntoUseSiteDecoration, alwaysFold, 0, 0)
INST(GlobalOutputDecoration, output, 0, 0)
- INST(GlobalInputDecoration, output, 0, 0)
+ INST(GlobalInputDecoration, input, 0, 0)
INST(GLSLLocationDecoration, glslLocation, 1, 0)
INST(GLSLOffsetDecoration, glslOffset, 1, 0)
INST(PayloadDecoration, payload, 0, 0)
diff --git a/source/slang/slang-ir-use-uninitialized-values.cpp b/source/slang/slang-ir-use-uninitialized-values.cpp
index e92eb7d7a..9f2cbe7a7 100644
--- a/source/slang/slang-ir-use-uninitialized-values.cpp
+++ b/source/slang/slang-ir-use-uninitialized-values.cpp
@@ -552,6 +552,9 @@ namespace Slang
if (variable->findDecoration<IRSemanticDecoration>())
return;
+ if (variable->findDecoration<IRGlobalInputDecoration>())
+ return;
+
// Check for initialization blocks
for (auto inst : variable->getChildren())
{
diff --git a/tests/diagnostics/uninitialized-globals.slang b/tests/diagnostics/uninitialized-globals.slang
index 314881a80..635db1e29 100644
--- a/tests/diagnostics/uninitialized-globals.slang
+++ b/tests/diagnostics/uninitialized-globals.slang
@@ -1,8 +1,8 @@
-//TEST:SIMPLE(filecheck=CHK): -target spirv
+//TEST:SIMPLE(filecheck=CHK): -allow-glsl -target spirv
// Using groupshared variables
groupshared float4 gsConstexpr = float4(1.0f);
-groupshared float4 gsUndefined;
+groupshared float4 gsUninitialized;
// OK
float use_constexpr_initialized_gs()
@@ -12,8 +12,8 @@ float use_constexpr_initialized_gs()
float use_undefined_gs()
{
- //CHK-DAG: warning 41017: use of uninitialized global variable 'gsUndefined'
- return gsUndefined.x;
+ //CHK-DAG: ([[# @LINE + 1]]): warning 41017: use of uninitialized global variable 'gsUninitialized'
+ return gsUninitialized.x;
}
// Using static variables
@@ -35,7 +35,7 @@ void write_to_later()
float use_never_written()
{
- //CHK-DAG: warning 41017: use of uninitialized global variable 'writtenNever'
+ //CHK-DAG: ([[# @LINE + 1]]): warning 41017: use of uninitialized global variable 'writtenNever'
return writtenNever;
}
@@ -45,4 +45,35 @@ float use_later_writte()
return writtenLater;
}
+// Varying inputs never warn
+layout(location = 0) in vec4 data;
+
+vec4 glsl_layout_in_ok()
+{
+ return data;
+}
+
+// Layout outputs should still be written to at some point
+layout(location = 1) out vec4 x;
+
+vec4 glsl_layout_out_undefined()
+{
+ //CHK-DAG: ([[# @LINE + 1]]): warning 41017: use of uninitialized global variable 'x'
+ return x;
+}
+
+layout(location = 2) out vec4 y;
+
+void glsl_layout_out_store(vec4 data)
+{
+ // Written to here...
+ y = data;
+}
+
+vec4 glsl_layout_out_ok()
+{
+ // ...so read here is treated as OK
+ return y;
+}
+
//CHK-NOT: warning 41017