|
@@ -13931,7 +13931,7 @@ bool SpirvEmitter::spirvToolsOptimize(std::vector<uint32_t> *mod,
|
|
|
|
|
|
if (spirvOptions.optConfig.empty()) {
|
|
if (spirvOptions.optConfig.empty()) {
|
|
// Add performance passes.
|
|
// Add performance passes.
|
|
- optimizer.RegisterPerformancePasses();
|
|
|
|
|
|
+ optimizer.RegisterPerformancePasses(spirvOptions.preserveInterface);
|
|
|
|
|
|
// Add propagation of volatile semantics passes.
|
|
// Add propagation of volatile semantics passes.
|
|
optimizer.RegisterPass(spvtools::CreateSpreadVolatileSemanticsPass());
|
|
optimizer.RegisterPass(spvtools::CreateSpreadVolatileSemanticsPass());
|
|
@@ -13974,17 +13974,19 @@ bool SpirvEmitter::spirvToolsLegalize(std::vector<uint32_t> *mod,
|
|
optimizer.RegisterPass(
|
|
optimizer.RegisterPass(
|
|
spvtools::CreateInterfaceVariableScalarReplacementPass());
|
|
spvtools::CreateInterfaceVariableScalarReplacementPass());
|
|
}
|
|
}
|
|
- optimizer.RegisterLegalizationPasses();
|
|
|
|
|
|
+ optimizer.RegisterLegalizationPasses(spirvOptions.preserveInterface);
|
|
// Add flattening of resources if needed.
|
|
// Add flattening of resources if needed.
|
|
if (spirvOptions.flattenResourceArrays ||
|
|
if (spirvOptions.flattenResourceArrays ||
|
|
declIdMapper.requiresFlatteningCompositeResources()) {
|
|
declIdMapper.requiresFlatteningCompositeResources()) {
|
|
optimizer.RegisterPass(
|
|
optimizer.RegisterPass(
|
|
spvtools::CreateReplaceDescArrayAccessUsingVarIndexPass());
|
|
spvtools::CreateReplaceDescArrayAccessUsingVarIndexPass());
|
|
- optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
|
|
|
|
|
|
+ optimizer.RegisterPass(
|
|
|
|
+ spvtools::CreateAggressiveDCEPass(spirvOptions.preserveInterface));
|
|
optimizer.RegisterPass(spvtools::CreateDescriptorScalarReplacementPass());
|
|
optimizer.RegisterPass(spvtools::CreateDescriptorScalarReplacementPass());
|
|
// ADCE should be run after desc_sroa in order to remove potentially
|
|
// ADCE should be run after desc_sroa in order to remove potentially
|
|
// illegal types such as structures containing opaque types.
|
|
// illegal types such as structures containing opaque types.
|
|
- optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
|
|
|
|
|
|
+ optimizer.RegisterPass(
|
|
|
|
+ spvtools::CreateAggressiveDCEPass(spirvOptions.preserveInterface));
|
|
}
|
|
}
|
|
if (dsetbindingsToCombineImageSampler &&
|
|
if (dsetbindingsToCombineImageSampler &&
|
|
!dsetbindingsToCombineImageSampler->empty()) {
|
|
!dsetbindingsToCombineImageSampler->empty()) {
|
|
@@ -13993,14 +13995,16 @@ bool SpirvEmitter::spirvToolsLegalize(std::vector<uint32_t> *mod,
|
|
// ADCE should be run after combining images and samplers in order to
|
|
// ADCE should be run after combining images and samplers in order to
|
|
// remove potentially illegal types such as structures containing opaque
|
|
// remove potentially illegal types such as structures containing opaque
|
|
// types.
|
|
// types.
|
|
- optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
|
|
|
|
|
|
+ optimizer.RegisterPass(
|
|
|
|
+ spvtools::CreateAggressiveDCEPass(spirvOptions.preserveInterface));
|
|
}
|
|
}
|
|
if (spirvOptions.reduceLoadSize) {
|
|
if (spirvOptions.reduceLoadSize) {
|
|
// The threshold must be bigger than 1.0 to reduce all possible loads.
|
|
// The threshold must be bigger than 1.0 to reduce all possible loads.
|
|
optimizer.RegisterPass(spvtools::CreateReduceLoadSizePass(1.1));
|
|
optimizer.RegisterPass(spvtools::CreateReduceLoadSizePass(1.1));
|
|
// ADCE should be run after reduce-load-size pass in order to remove
|
|
// ADCE should be run after reduce-load-size pass in order to remove
|
|
// dead instructions.
|
|
// dead instructions.
|
|
- optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
|
|
|
|
|
|
+ optimizer.RegisterPass(
|
|
|
|
+ spvtools::CreateAggressiveDCEPass(spirvOptions.preserveInterface));
|
|
}
|
|
}
|
|
optimizer.RegisterPass(spvtools::CreateReplaceInvalidOpcodePass());
|
|
optimizer.RegisterPass(spvtools::CreateReplaceInvalidOpcodePass());
|
|
optimizer.RegisterPass(spvtools::CreateCompactIdsPass());
|
|
optimizer.RegisterPass(spvtools::CreateCompactIdsPass());
|