Metal: add RelaxedtoHalfPass for improved ALU performance (#5504)
This commit is contained in:
@@ -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**].
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -51,6 +51,7 @@ public:
|
||||
|
||||
struct Config {
|
||||
filament::Variant variant;
|
||||
MaterialBuilder::TargetApi targetApi;
|
||||
filament::backend::ShaderType shaderType;
|
||||
filament::backend::ShaderModel shaderModel;
|
||||
filament::MaterialDomain domain;
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user