Relax DebugLine validation (#5916)
* In NonSemantic.Shader.DebugInfo.100, DebugLine validation should only
check column end >= column start if line start == line end
diff --git a/source/val/validate_extensions.cpp b/source/val/validate_extensions.cpp
index cb4768d..c2d8d59 100644
--- a/source/val/validate_extensions.cpp
+++ b/source/val/validate_extensions.cpp
@@ -3208,10 +3208,11 @@
return _.diag(SPV_ERROR_INVALID_DATA, inst)
<< ext_inst_name() << ": operand Line End (" << line_end
<< ") is less than Line Start (" << line_start << ")";
- } else if (column_end < column_start) {
+ } else if (line_start == line_end && column_end < column_start) {
return _.diag(SPV_ERROR_INVALID_DATA, inst)
<< ext_inst_name() << ": operand Column End (" << column_end
- << ") is less than Column Start (" << column_start << ")";
+ << ") is less than Column Start (" << column_start
+ << ") when Line Start equals Line End";
}
break;
}
diff --git a/test/val/val_ext_inst_debug_test.cpp b/test/val/val_ext_inst_debug_test.cpp
index bd4ab3c..445be08 100644
--- a/test/val/val_ext_inst_debug_test.cpp
+++ b/test/val/val_ext_inst_debug_test.cpp
@@ -5023,10 +5023,28 @@
CompileSuccessfully(GenerateShaderCodeForDebugInfo(
src, "", dbg_inst_header, body, shader_extension, "Vertex"));
ASSERT_EQ(SPV_ERROR_INVALID_DATA, ValidateInstructions());
- EXPECT_THAT(
- getDiagnosticString(),
- HasSubstr(
- "DebugLine: operand Column End (0) is less than Column Start (1)"));
+ EXPECT_THAT(getDiagnosticString(),
+ HasSubstr("DebugLine: operand Column End (0) is less than Column "
+ "Start (1) when Line Start equals Line End"));
+}
+
+TEST_F(ValidateVulkan100DebugInfo, DebugLineColumnEndSmallerMultiline) {
+ const std::string src = R"(
+%src = OpString "simple.hlsl"
+%code = OpString "int main() { }"
+)";
+
+ const std::string dbg_inst_header = R"(
+%dbg_src = OpExtInst %void %DbgExt DebugSource %src %code
+)";
+
+ const std::string body = R"(
+%line1 = OpExtInst %void %DbgExt DebugLine %dbg_src %u32_1 %u32_2 %u32_1 %u32_0
+)";
+
+ CompileSuccessfully(GenerateShaderCodeForDebugInfo(
+ src, "", dbg_inst_header, body, shader_extension, "Vertex"));
+ ASSERT_EQ(SPV_SUCCESS, ValidateInstructions());
}
} // namespace