Skip to content

Commit 36a3ef4

Browse files
authored
test fixture: print optimized assembly that fails to validate (KhronosGroup#6043)
In a spirv-opt pass test that does validation, disassemble the text first. So if validation fails, print the spir-v assembly that fails to validate.
1 parent 940c6fa commit 36a3ef4

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

test/opt/pass_fixture.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -122,23 +122,24 @@ class PassTest : public TestT {
122122
auto status = Pass::Status::SuccessWithoutChange;
123123
std::tie(optimized_bin, status) = SinglePassRunToBinary<PassT>(
124124
assembly, skip_nop, std::forward<Args>(args)...);
125+
std::string optimized_asm;
126+
SpirvTools tools(env_);
127+
EXPECT_TRUE(
128+
tools.Disassemble(optimized_bin, &optimized_asm, disassemble_options_))
129+
<< "Disassembling failed for shader:\n"
130+
<< assembly << std::endl;
125131
if (do_validation) {
126132
spv_context spvContext = spvContextCreate(env_);
127133
spv_diagnostic diagnostic = nullptr;
128134
spv_const_binary_t binary = {optimized_bin.data(), optimized_bin.size()};
129135
spv_result_t error = spvValidateWithOptions(
130136
spvContext, ValidatorOptions(), &binary, &diagnostic);
131-
EXPECT_EQ(error, 0);
137+
EXPECT_EQ(error, 0) << "validation failed for optimized asm:\n"
138+
<< optimized_asm;
132139
if (error != 0) spvDiagnosticPrint(diagnostic);
133140
spvDiagnosticDestroy(diagnostic);
134141
spvContextDestroy(spvContext);
135142
}
136-
std::string optimized_asm;
137-
SpirvTools tools(env_);
138-
EXPECT_TRUE(
139-
tools.Disassemble(optimized_bin, &optimized_asm, disassemble_options_))
140-
<< "Disassembling failed for shader:\n"
141-
<< assembly << std::endl;
142143
return std::make_tuple(optimized_asm, status);
143144
}
144145

0 commit comments

Comments
 (0)