repair and optimize matdbg

we add a checkProgramEdits() method that must be called periodically
on all materials. This is currently done at the beginning of a frame.
This commit is contained in:
Mathias Agopian
2022-03-31 16:52:26 -07:00
committed by Mathias Agopian
parent 271cda88aa
commit 487b10fdda
3 changed files with 19 additions and 13 deletions
+3
View File
@@ -469,6 +469,9 @@ void FEngine::prepare() {
// Commit default material instances.
mMaterials.forEach([&driver](FMaterial* material) {
#if FILAMENT_ENABLE_MATDBG
material->checkProgramEdits();
#endif
material->getDefaultInstance()->commit(driver);
});
}
+6 -5
View File
@@ -394,8 +394,7 @@ void FMaterial::getSurfaceProgramSlow(Variant variant) const noexcept {
createAndCacheProgram(std::move(pb), variant);
}
void FMaterial::getPostProcessProgramSlow(Variant variant)
const noexcept {
void FMaterial::getPostProcessProgramSlow(Variant variant) const noexcept {
Program pb = getProgramBuilderWithVariants(variant, variant, variant);
pb.setUniformBlock(BindingPoints::PER_VIEW, PerViewUib::_name)
@@ -526,6 +525,8 @@ void FMaterial::applyPendingEdits() noexcept {
* @{
*/
#if FILAMENT_ENABLE_MATDBG
void FMaterial::onEditCallback(void* userdata, const utils::CString& name, const void* packageData,
size_t packageSize) {
FMaterial* material = upcast((Material*) userdata);
@@ -537,14 +538,14 @@ void FMaterial::onEditCallback(void* userdata, const utils::CString& name, const
}
void FMaterial::onQueryCallback(void* userdata, VariantList* pVariants) {
#if FILAMENT_ENABLE_MATDBG
FMaterial* material = upcast((Material*) userdata);
*pVariants = material->mActivePrograms;
material->mActivePrograms.reset();
#endif
}
/** @}*/
#endif
/** @}*/
void FMaterial::destroyPrograms(FEngine& engine) {
DriverApi& driverApi = engine.getDriverApi();
+10 -8
View File
@@ -93,9 +93,6 @@ public:
#if FILAMENT_ENABLE_MATDBG
assert_invariant(variant.key < VARIANT_COUNT);
mActivePrograms.set(variant.key);
if (UTILS_UNLIKELY(mPendingEdits.load())) {
const_cast<FMaterial*>(this)->applyPendingEdits();
}
#endif
assert_invariant(mCachedPrograms[variant.key]);
return mCachedPrograms[variant.key];
@@ -153,6 +150,7 @@ public:
void destroyPrograms(FEngine& engine);
#if FILAMENT_ENABLE_MATDBG
/**
* Callback handlers for the debug server, potentially called from any thread. The userdata
* argument has the same value that was passed to DebugServer::addMaterial(), which should
@@ -173,7 +171,14 @@ public:
*/
static void onQueryCallback(void* userdata, VariantList* pActiveVariants);
void checkProgramEdits() noexcept {
if (UTILS_UNLIKELY(mPendingEdits.load())) {
applyPendingEdits();
}
}
/** @}*/
#endif
private:
void prepareProgramSlow(Variant variant) const noexcept;
@@ -186,11 +191,6 @@ private:
// try to order by frequency of use
mutable std::array<backend::Handle<backend::HwProgram>, VARIANT_COUNT> mCachedPrograms;
#if FILAMENT_ENABLE_MATDBG
// TODO: this should be protected with a mutex
mutable VariantList mActivePrograms;
#endif
backend::RasterState mRasterState;
BlendingMode mRenderBlendingMode = BlendingMode::OPAQUE;
TransparencyMode mTransparencyMode = TransparencyMode::DEFAULT;
@@ -227,6 +227,8 @@ private:
#if FILAMENT_ENABLE_MATDBG
matdbg::MaterialKey mDebuggerId;
// TODO: this should be protected with a mutex
mutable VariantList mActivePrograms;
#endif
utils::CString mName;