Skip to content

Commit f27e2d9

Browse files
committed
Fixed some caching flags overrides
1 parent 7d44f93 commit f27e2d9

File tree

1 file changed

+22
-12
lines changed

1 file changed

+22
-12
lines changed

include/nbl/asset/interchange/IAssetLoader.h

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ class IAssetLoader : public virtual core::IReferenceCounted
303303
return true;
304304
};
305305

306-
auto bundle = interm_getAssetInHierarchy_find(std::forward<Args>(args)...);
306+
auto bundle = interm_getAssetInHierarchy_find(_restoreLevels, std::forward<Args>(args)...);
307307

308308
if (bundle.getContents().empty() || !any_dummy(bundle))
309309
return bundle;
@@ -339,30 +339,40 @@ class IAssetLoader : public virtual core::IReferenceCounted
339339
}
340340

341341
private:
342-
static IAssetLoader::SAssetLoadParams getFindParams(IAssetLoader::SAssetLoadParams _params)
342+
static IAssetLoader::SAssetLoadParams getFindParams(IAssetLoader::SAssetLoadParams _params, uint32_t _restoreLevels, uint32_t _hierLevel)
343343
{
344-
_params.cacheFlags = static_cast<E_CACHING_FLAGS>(_params.cacheFlags & ECF_DONT_CACHE_REFERENCES);
344+
using flags_t = std::underlying_type_t<E_CACHING_FLAGS>;
345+
flags_t mask = static_cast<flags_t>(0);
346+
mask = core::bitfieldInsert<flags_t>(mask, ECF_DONT_CACHE_REFERENCES, 2u*_hierLevel, 2u*_restoreLevels);
347+
_params.cacheFlags = static_cast<E_CACHING_FLAGS>(_params.cacheFlags & mask);
345348
return _params;
346349
}
347-
SAssetBundle interm_getAssetInHierarchy_find(IAssetManager* _mgr, io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel, IAssetLoader::IAssetLoaderOverride* _override)
350+
SAssetBundle interm_getAssetInHierarchy_find(uint32_t _restoreLevels, IAssetManager* _mgr, io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel, IAssetLoader::IAssetLoaderOverride* _override)
348351
{
349-
return interm_getAssetInHierarchy(_mgr, _file, _supposedFilename, getFindParams(_params), _hierarchyLevel);
352+
return interm_getAssetInHierarchy(_mgr, _file, _supposedFilename, getFindParams(_params, _restoreLevels, _hierarchyLevel), _hierarchyLevel);
350353
}
351-
SAssetBundle interm_getAssetInHierarchy_find(IAssetManager* _mgr, const std::string& _filename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel, IAssetLoader::IAssetLoaderOverride* _override)
354+
SAssetBundle interm_getAssetInHierarchy_find(uint32_t _restoreLevels, IAssetManager* _mgr, const std::string& _filename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel, IAssetLoader::IAssetLoaderOverride* _override)
352355
{
353-
return interm_getAssetInHierarchy(_mgr, _filename, getFindParams(_params), _hierarchyLevel, _override);
356+
return interm_getAssetInHierarchy(_mgr, _filename, getFindParams(_params, _restoreLevels, _hierarchyLevel), _hierarchyLevel, _override);
354357
}
355-
SAssetBundle interm_getAssetInHierarchy_find(IAssetManager* _mgr, io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel)
358+
SAssetBundle interm_getAssetInHierarchy_find(uint32_t _restoreLevels, IAssetManager* _mgr, io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel)
356359
{
357-
return interm_getAssetInHierarchy(_mgr, _file, _supposedFilename, getFindParams(_params), _hierarchyLevel);
360+
return interm_getAssetInHierarchy(_mgr, _file, _supposedFilename, getFindParams(_params, _restoreLevels, _hierarchyLevel), _hierarchyLevel);
358361
}
359-
SAssetBundle interm_getAssetInHierarchy_find(IAssetManager* _mgr, const std::string& _filename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel)
362+
SAssetBundle interm_getAssetInHierarchy_find(uint32_t _restoreLevels, IAssetManager* _mgr, const std::string& _filename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel)
360363
{
361-
return interm_getAssetInHierarchy(_mgr, _filename, getFindParams(_params), _hierarchyLevel);
364+
return interm_getAssetInHierarchy(_mgr, _filename, getFindParams(_params, _restoreLevels, _hierarchyLevel), _hierarchyLevel);
362365
}
363366
static IAssetLoader::SAssetLoadParams getReloadParams(IAssetLoader::SAssetLoadParams _params, uint32_t _restoreLevels, uint32_t _hierLevel)
364367
{
365-
_params.cacheFlags = ECF_DUPLICATE_UNTIL_LEVEL(_restoreLevels + _hierLevel);
368+
using flags_t = std::underlying_type_t<E_CACHING_FLAGS>;
369+
constexpr uint32_t bitdepth = sizeof(flags_t)*8u;
370+
const flags_t zeroOutMask = (~static_cast<flags_t>(0)) >> (bitdepth - 2u*(_restoreLevels+_hierLevel));
371+
flags_t reloadFlags = _params.cacheFlags;
372+
reloadFlags &= zeroOutMask; // make sure we never pointlessy reload levels above (_restoreLevels+_hierLevel) in reload pass
373+
// set flags for levels [_hierLevel,_hierLevel+_restoreLevels) to dont look into cache and dont put into cache
374+
reloadFlags = core::bitfieldInsert<flags_t>(reloadFlags, ECF_DUPLICATE_REFERENCES, _hierLevel*2, _restoreLevels*2);
375+
_params.cacheFlags = static_cast<E_CACHING_FLAGS>(reloadFlags);
366376
return _params;
367377
}
368378
SAssetBundle interm_getAssetInHierarchy_reload(uint32_t _restoreLevels, IAssetManager* _mgr, io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel, IAssetLoader::IAssetLoaderOverride* _override)

0 commit comments

Comments
 (0)