Metal: add RelaxedtoHalfPass for improved ALU performance (#5504)

This commit is contained in:
Ben Doherty
2022-05-04 11:13:28 -07:00
committed by GitHub
parent ebd5f150c1
commit efec4e1adc
4 changed files with 11 additions and 0 deletions
+2
View File
@@ -5,6 +5,8 @@ A new header is inserted each time a *tag* is created.
## v1.22.1 (currently main branch)
- Metal: Shaders now use `half` floating-point arithmetic when possible for improved performance. [⚠️ **Recompile Materials**]
## v1.22.0
- engine: Changed UBOs layout [⚠️ **Material breakage**].
+7
View File
@@ -441,6 +441,13 @@ std::shared_ptr<spvtools::Optimizer> GLSLPostProcessor::createOptimizer(
registerSizePasses(*optimizer, config);
} else if (optimization == MaterialBuilder::Optimization::PERFORMANCE) {
registerPerformancePasses(*optimizer, config);
// Metal doesn't support relaxed precision, but does have support for float16 math operations.
if (config.targetApi == MaterialBuilder::TargetApi::METAL) {
optimizer->RegisterPass(CreateConvertRelaxedToHalfPass());
optimizer->RegisterPass(CreateSimplificationPass());
optimizer->RegisterPass(CreateRedundancyEliminationPass());
optimizer->RegisterPass(CreateAggressiveDCEPass());
}
}
return optimizer;
+1
View File
@@ -51,6 +51,7 @@ public:
struct Config {
filament::Variant variant;
MaterialBuilder::TargetApi targetApi;
filament::backend::ShaderType shaderType;
filament::backend::ShaderModel shaderModel;
filament::MaterialDomain domain;
+1
View File
@@ -727,6 +727,7 @@ bool MaterialBuilder::generateShaders(JobSystem& jobSystem, const std::vector<Va
#ifndef FILAMAT_LITE
GLSLPostProcessor::Config config{
.variant = v.variant,
.targetApi = targetApi,
.shaderType = v.stage,
.shaderModel = shaderModel,
.domain = mMaterialDomain,