From a484fe1de33d1c4eae85cbdff41e2ca53f85038b Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Mon, 3 Apr 2023 14:06:42 -0700 Subject: [PATCH] rename ChunkcContainer::addChild/addSimpleChild to push/emplace (#6704) 'child' didn't make any sense in this API, push/emplace mimics std::vector, which is closer to what the api actually does. --- libs/filamat/src/MaterialBuilder.cpp | 93 ++++++++++++++------------ libs/filamat/src/eiff/ChunkContainer.h | 6 +- libs/matdbg/src/ShaderReplacer.cpp | 8 +-- 3 files changed, 58 insertions(+), 49 deletions(-) diff --git a/libs/filamat/src/MaterialBuilder.cpp b/libs/filamat/src/MaterialBuilder.cpp index 70dea00f61..b2f6894480 100644 --- a/libs/filamat/src/MaterialBuilder.cpp +++ b/libs/filamat/src/MaterialBuilder.cpp @@ -701,7 +701,7 @@ bool MaterialBuilder::generateShaders(JobSystem& jobSystem, const std::vector(ChunkType::MaterialHasCustomDepthShader, needsStandardDepthProgram()); + container.emplace(ChunkType::MaterialHasCustomDepthShader, needsStandardDepthProgram()); std::atomic_bool cancelJobs(false); bool firstJob = true; @@ -894,12 +894,12 @@ bool MaterialBuilder::generateShaders(JobSystem& jobSystem, const std::vector( + const auto& dictionaryChunk = container.push( std::move(textDictionary), ChunkType::DictionaryText); // Emit GLSL chunk (MaterialTextChunk). if (!glslEntries.empty()) { - container.addChild(std::move(glslEntries), + container.push(std::move(glslEntries), dictionaryChunk.getDictionary(), ChunkType::MaterialGlsl); } @@ -907,13 +907,13 @@ bool MaterialBuilder::generateShaders(JobSystem& jobSystem, const std::vector(std::move(spirvDictionary), stripInfo); - container.addChild(std::move(spirvEntries)); + container.push(std::move(spirvDictionary), stripInfo); + container.push(std::move(spirvEntries)); } // Emit Metal chunk (MaterialTextChunk). if (!metalEntries.empty()) { - container.addChild(std::move(metalEntries), + container.push(std::move(metalEntries), dictionaryChunk.getDictionary(), ChunkType::MaterialMetal); } #endif @@ -1186,11 +1186,11 @@ std::string MaterialBuilder::peek(backend::ShaderStage stage, } void MaterialBuilder::writeCommonChunks(ChunkContainer& container, MaterialInfo& info) const noexcept { - container.addSimpleChild(ChunkType::MaterialVersion, MATERIAL_VERSION); - container.addSimpleChild(ChunkType::MaterialFeatureLevel, (uint8_t)info.featureLevel); - container.addSimpleChild(ChunkType::MaterialName, mMaterialName.c_str_safe()); - container.addSimpleChild(ChunkType::MaterialShaderModels, mShaderModels.getValue()); - container.addSimpleChild(ChunkType::MaterialDomain, static_cast(mMaterialDomain)); + container.emplace(ChunkType::MaterialVersion, MATERIAL_VERSION); + container.emplace(ChunkType::MaterialFeatureLevel, (uint8_t)info.featureLevel); + container.emplace(ChunkType::MaterialName, mMaterialName.c_str_safe()); + container.emplace(ChunkType::MaterialShaderModels, mShaderModels.getValue()); + container.emplace(ChunkType::MaterialDomain, static_cast(mMaterialDomain)); using namespace filament; @@ -1206,18 +1206,18 @@ void MaterialBuilder::writeCommonChunks(ChunkContainer& container, MaterialInfo& { PerRenderableMorphingUib::_name, UniformBindingPoints::PER_RENDERABLE_MORPHING }, { info.uib.getName(), UniformBindingPoints::PER_MATERIAL_INSTANCE } }; - container.addChild(std::move(list)); + container.push(std::move(list)); } // note: this chunk is needed for Vulkan and GL backends. Metal shouldn't need it (but // still does as of now). - container.addChild(info.samplerBindings); + container.push(info.samplerBindings); // User Material UIB - container.addChild(info.uib); + container.push(info.uib); // User Material SIB - container.addChild(info.sib); + container.push(info.sib); // TODO: should we write the SSBO info? this would only be needed if we wanted to provide // an interface to set [get?] values in the buffer. But we can do that easily @@ -1225,21 +1225,25 @@ void MaterialBuilder::writeCommonChunks(ChunkContainer& container, MaterialInfo& if (mMaterialDomain != MaterialDomain::COMPUTE) { // User Subpass - container.addChild(info.subpass); + container.push(info.subpass); - container.addSimpleChild(ChunkType::MaterialDoubleSidedSet, mDoubleSidedCapability); - container.addSimpleChild(ChunkType::MaterialDoubleSided, mDoubleSided); - container.addSimpleChild(ChunkType::MaterialBlendingMode, static_cast(mBlendingMode)); - container.addSimpleChild(ChunkType::MaterialTransparencyMode, static_cast(mTransparencyMode)); - container.addSimpleChild(ChunkType::MaterialReflectionMode, static_cast(mReflectionMode)); - container.addSimpleChild(ChunkType::MaterialColorWrite, mColorWrite); - container.addSimpleChild(ChunkType::MaterialDepthWriteSet, mDepthWriteSet); - container.addSimpleChild(ChunkType::MaterialDepthWrite, mDepthWrite); - container.addSimpleChild(ChunkType::MaterialDepthTest, mDepthTest); - container.addSimpleChild(ChunkType::MaterialInstanced, mInstanced); - container.addSimpleChild(ChunkType::MaterialAlphaToCoverageSet, mAlphaToCoverageSet); - container.addSimpleChild(ChunkType::MaterialAlphaToCoverage, mAlphaToCoverage); - container.addSimpleChild(ChunkType::MaterialCullingMode, static_cast(mCullingMode)); + container.emplace(ChunkType::MaterialDoubleSidedSet, mDoubleSidedCapability); + container.emplace(ChunkType::MaterialDoubleSided, mDoubleSided); + container.emplace(ChunkType::MaterialBlendingMode, + static_cast(mBlendingMode)); + container.emplace(ChunkType::MaterialTransparencyMode, + static_cast(mTransparencyMode)); + container.emplace(ChunkType::MaterialReflectionMode, + static_cast(mReflectionMode)); + container.emplace(ChunkType::MaterialColorWrite, mColorWrite); + container.emplace(ChunkType::MaterialDepthWriteSet, mDepthWriteSet); + container.emplace(ChunkType::MaterialDepthWrite, mDepthWrite); + container.emplace(ChunkType::MaterialDepthTest, mDepthTest); + container.emplace(ChunkType::MaterialInstanced, mInstanced); + container.emplace(ChunkType::MaterialAlphaToCoverageSet, mAlphaToCoverageSet); + container.emplace(ChunkType::MaterialAlphaToCoverage, mAlphaToCoverage); + container.emplace(ChunkType::MaterialCullingMode, + static_cast(mCullingMode)); uint64_t properties = 0; UTILS_NOUNROLL @@ -1248,30 +1252,35 @@ void MaterialBuilder::writeCommonChunks(ChunkContainer& container, MaterialInfo& properties |= uint64_t(1u) << i; } } - container.addSimpleChild(ChunkType::MaterialProperties, properties); + container.emplace(ChunkType::MaterialProperties, properties); } } void MaterialBuilder::writeSurfaceChunks(ChunkContainer& container) const noexcept { if (mBlendingMode == BlendingMode::MASKED) { - container.addSimpleChild(ChunkType::MaterialMaskThreshold, mMaskThreshold); + container.emplace(ChunkType::MaterialMaskThreshold, mMaskThreshold); } - container.addSimpleChild(ChunkType::MaterialShading, static_cast(mShading)); + container.emplace(ChunkType::MaterialShading, static_cast(mShading)); if (mShading == Shading::UNLIT) { - container.addSimpleChild(ChunkType::MaterialShadowMultiplier, mShadowMultiplier); + container.emplace(ChunkType::MaterialShadowMultiplier, mShadowMultiplier); } - container.addSimpleChild(ChunkType::MaterialRefraction, static_cast(mRefractionMode)); - container.addSimpleChild(ChunkType::MaterialRefractionType, static_cast(mRefractionType)); - container.addSimpleChild(ChunkType::MaterialClearCoatIorChange, mClearCoatIorChange); - container.addSimpleChild(ChunkType::MaterialRequiredAttributes, mRequiredAttributes.getValue()); - container.addSimpleChild(ChunkType::MaterialSpecularAntiAliasing, mSpecularAntiAliasing); - container.addSimpleChild(ChunkType::MaterialSpecularAntiAliasingVariance, mSpecularAntiAliasingVariance); - container.addSimpleChild(ChunkType::MaterialSpecularAntiAliasingThreshold, mSpecularAntiAliasingThreshold); - container.addSimpleChild(ChunkType::MaterialVertexDomain, static_cast(mVertexDomain)); - container.addSimpleChild(ChunkType::MaterialInterpolation, static_cast(mInterpolation)); + container.emplace(ChunkType::MaterialRefraction, static_cast(mRefractionMode)); + container.emplace(ChunkType::MaterialRefractionType, + static_cast(mRefractionType)); + container.emplace(ChunkType::MaterialClearCoatIorChange, mClearCoatIorChange); + container.emplace(ChunkType::MaterialRequiredAttributes, + mRequiredAttributes.getValue()); + container.emplace(ChunkType::MaterialSpecularAntiAliasing, mSpecularAntiAliasing); + container.emplace(ChunkType::MaterialSpecularAntiAliasingVariance, + mSpecularAntiAliasingVariance); + container.emplace(ChunkType::MaterialSpecularAntiAliasingThreshold, + mSpecularAntiAliasingThreshold); + container.emplace(ChunkType::MaterialVertexDomain, static_cast(mVertexDomain)); + container.emplace(ChunkType::MaterialInterpolation, + static_cast(mInterpolation)); } } // namespace filamat diff --git a/libs/filamat/src/eiff/ChunkContainer.h b/libs/filamat/src/eiff/ChunkContainer.h index da66621b25..617b2386e8 100644 --- a/libs/filamat/src/eiff/ChunkContainer.h +++ b/libs/filamat/src/eiff/ChunkContainer.h @@ -37,7 +37,7 @@ public: template ::value, int> = 0, typename... Args> - const T& addChild(Args&&... args) { + const T& push(Args&&... args) { T* chunk = new T(std::forward(args)...); mChildren.emplace_back(chunk); return *chunk; @@ -45,8 +45,8 @@ public: // Helper method to add a SimpleFieldChunk to this ChunkContainer. template - const SimpleFieldChunk& addSimpleChild(Args&&... args) { - return addChild>(std::forward(args)...); + const SimpleFieldChunk& emplace(Args&&... args) { + return push>(std::forward(args)...); } size_t getSize() const; diff --git a/libs/matdbg/src/ShaderReplacer.cpp b/libs/matdbg/src/ShaderReplacer.cpp index 18952200b1..8e63d95b60 100644 --- a/libs/matdbg/src/ShaderReplacer.cpp +++ b/libs/matdbg/src/ShaderReplacer.cpp @@ -328,8 +328,8 @@ void ShaderIndex::writeChunks(ostream& stream) { } filamat::ChunkContainer cc; - const auto& dchunk = cc.addChild(std::move(lines), mDictTag); - cc.addChild(std::move(mShaderRecords), dchunk.getDictionary(), mMatTag); + const auto& dchunk = cc.push(std::move(lines), mDictTag); + cc.push(std::move(mShaderRecords), dchunk.getDictionary(), mMatTag); const size_t bufSize = cc.getSize(); auto buffer = std::make_unique(bufSize); @@ -391,8 +391,8 @@ void BlobIndex::writeChunks(ostream& stream) { // Apply SMOL-V compression and write out the results. filamat::ChunkContainer cc; - cc.addChild(std::move(mShaderRecords)); - cc.addChild(std::move(blobs), false); + cc.push(std::move(mShaderRecords)); + cc.push(std::move(blobs), false); Flattener prepass = Flattener::getDryRunner(); initialize(prepass);