summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/bgfx/3rdparty/spirv-tools/source/opt/optimizer.cpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/bgfx/3rdparty/spirv-tools/source/opt/optimizer.cpp')
-rw-r--r--3rdparty/bgfx/3rdparty/spirv-tools/source/opt/optimizer.cpp24
1 files changed, 15 insertions, 9 deletions
diff --git a/3rdparty/bgfx/3rdparty/spirv-tools/source/opt/optimizer.cpp b/3rdparty/bgfx/3rdparty/spirv-tools/source/opt/optimizer.cpp
index 1e7df99170a..ece1abec3ec 100644
--- a/3rdparty/bgfx/3rdparty/spirv-tools/source/opt/optimizer.cpp
+++ b/3rdparty/bgfx/3rdparty/spirv-tools/source/opt/optimizer.cpp
@@ -560,20 +560,26 @@ bool Optimizer::Run(const uint32_t* original_binary,
return false;
}
- optimized_binary->clear();
- context->module()->ToBinary(optimized_binary, /* skip_nop = */ true);
-
#ifndef NDEBUG
if (status == opt::Pass::Status::SuccessWithoutChange) {
- auto changed = optimized_binary->size() != original_binary_size ||
- memcmp(optimized_binary->data(), original_binary,
- original_binary_size) != 0;
- assert(!changed &&
- "Binary unexpectedly changed despite optimizer saying there was no "
- "change");
+ std::vector<uint32_t> optimized_binary_with_nop;
+ context->module()->ToBinary(&optimized_binary_with_nop,
+ /* skip_nop = */ false);
+ assert(optimized_binary_with_nop.size() == original_binary_size &&
+ "Binary size unexpectedly changed despite the optimizer saying "
+ "there was no change");
+ assert(memcmp(optimized_binary_with_nop.data(), original_binary,
+ original_binary_size) == 0 &&
+ "Binary content unexpectedly changed despite the optimizer saying "
+ "there was no change");
}
#endif // !NDEBUG
+ // Note that |original_binary| and |optimized_binary| may share the same
+ // buffer and the below will invalidate |original_binary|.
+ optimized_binary->clear();
+ context->module()->ToBinary(optimized_binary, /* skip_nop = */ true);
+
return true;
}