Skip to content

Commit 6a920d3

Browse files
committed
postfx materials now support sRGB emulation in FL0
FIXES=[498317018]
1 parent 16a7047 commit 6a920d3

File tree

4 files changed

+23
-9
lines changed

4 files changed

+23
-9
lines changed

libs/filamat/src/shaders/ShaderGenerator.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,9 @@ void ShaderGenerator::generateVertexDomainDefines(io::sstream& out, VertexDomain
250250
}
251251

252252
void ShaderGenerator::generatePostProcessMaterialVariantDefines(io::sstream& out,
253-
PostProcessVariant const variant) noexcept {
253+
ShaderStage const, MaterialBuilder::FeatureLevel const featureLevel,
254+
MaterialInfo const&, PostProcessVariant const variant) noexcept {
255+
CodeGenerator::generateDefine(out, "MATERIAL_FEATURE_LEVEL", uint32_t(featureLevel));
254256
switch (variant) {
255257
case PostProcessVariant::OPAQUE:
256258
CodeGenerator::generateDefine(out, "POST_PROCESS_OPAQUE", 1u);
@@ -737,7 +739,8 @@ std::string ShaderGenerator::createPostProcessVertexProgram(ShaderModel const sm
737739
}
738740

739741
CodeGenerator::generatePostProcessInputs(vs, ShaderStage::VERTEX);
740-
generatePostProcessMaterialVariantDefines(vs, PostProcessVariant(variantKey));
742+
generatePostProcessMaterialVariantDefines(vs, ShaderStage::VERTEX,
743+
featureLevel, material, PostProcessVariant(variantKey));
741744

742745
cg.generateUniforms(vs, ShaderStage::VERTEX,
743746
DescriptorSetBindingPoints::PER_VIEW,
@@ -765,14 +768,16 @@ std::string ShaderGenerator::createPostProcessVertexProgram(ShaderModel const sm
765768
std::string ShaderGenerator::createPostProcessFragmentProgram(ShaderModel const sm,
766769
MaterialBuilder::TargetApi const targetApi, MaterialBuilder::TargetLanguage const targetLanguage,
767770
MaterialBuilder::FeatureLevel const featureLevel,
768-
MaterialInfo const& material, uint8_t variant, uint32_t apiLevel) const noexcept {
771+
MaterialInfo const& material, filament::Variant::type_t variantKey,
772+
uint32_t apiLevel) const noexcept {
769773
const CodeGenerator cg(sm, targetApi, targetLanguage, featureLevel);
770774
io::sstream fs;
771775
cg.generateCommonProlog(fs, ShaderStage::FRAGMENT, material, {}, apiLevel);
772776

773777
generateUserSpecConstants(cg, fs, mConstants);
774778

775-
generatePostProcessMaterialVariantDefines(fs, PostProcessVariant(variant));
779+
generatePostProcessMaterialVariantDefines(fs, ShaderStage::FRAGMENT,
780+
featureLevel, material, PostProcessVariant(variantKey));
776781

777782
// custom material variables
778783
size_t variableIndex = 0;

libs/filamat/src/shaders/ShaderGenerator.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,9 @@ class ShaderGenerator {
102102
MaterialInfo const& material, filament::Variant variant) noexcept;
103103

104104
static void generatePostProcessMaterialVariantDefines(utils::io::sstream& out,
105-
filament::PostProcessVariant variant) noexcept;
105+
filament::backend::ShaderStage stage,
106+
MaterialBuilder::FeatureLevel featureLevel,
107+
MaterialInfo const& material, filament::PostProcessVariant variant) noexcept;
106108

107109
static void generateUserSpecConstants(
108110
const CodeGenerator& cg, utils::io::sstream& fs,
@@ -117,7 +119,8 @@ class ShaderGenerator {
117119
std::string createPostProcessFragmentProgram(filament::backend::ShaderModel sm,
118120
MaterialBuilder::TargetApi targetApi, MaterialBuilder::TargetLanguage targetLanguage,
119121
MaterialBuilder::FeatureLevel featureLevel,
120-
MaterialInfo const& material, uint8_t variant, uint32_t apiLevel) const noexcept;
122+
MaterialInfo const& material, filament::Variant::type_t variantKey,
123+
uint32_t apiLevel) const noexcept;
121124

122125
static void appendShader(utils::io::sstream& ss,
123126
const utils::CString& shader, size_t lineOffset) noexcept;

shaders/src/post_process_main.fs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,14 @@ void main() {
44
// Invoke user code
55
postProcess(inputs);
66

7+
#if MATERIAL_FEATURE_LEVEL == 0
8+
if (CONFIG_SRGB_SWAPCHAIN_EMULATION) {
9+
if (frameUniforms.rec709 != 0) {
10+
inputs.FRAG_OUTPUT0.rgb = pow(inputs.FRAG_OUTPUT0.rgb, vec3(0.45454));
11+
}
12+
}
13+
#endif
14+
715
#if defined(FRAG_OUTPUT0)
816
FRAG_OUTPUT_AT0 FRAG_OUTPUT_SWIZZLE0 = inputs.FRAG_OUTPUT0;
917
#endif

shaders/src/surface_main.fs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,7 @@ void main() {
114114
#if MATERIAL_FEATURE_LEVEL == 0
115115
if (CONFIG_SRGB_SWAPCHAIN_EMULATION) {
116116
if (frameUniforms.rec709 != 0) {
117-
fragColor.r = pow(fragColor.r, 0.45454);
118-
fragColor.g = pow(fragColor.g, 0.45454);
119-
fragColor.b = pow(fragColor.b, 0.45454);
117+
fragColor.rgb = pow(fragColor.rgb, vec3(0.45454));
120118
}
121119
}
122120
#endif

0 commit comments

Comments
 (0)