summaryrefslogtreecommitdiff
path: root/src/asset-manager.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2024-01-09 13:37:25 -0500
committerJonathan Bradley <jcb@pikum.xyz>2024-01-09 13:37:25 -0500
commitf947590b909b287c0a724def6ef03937f85c361b (patch)
tree7b31fd1c337fdceabb4d4744e1eab0101565a869 /src/asset-manager.cpp
parent4676e22a8188de5924f6bcf4eec05fb4257de9cb (diff)
refactor and simplify bucketed-array
Diffstat (limited to 'src/asset-manager.cpp')
-rw-r--r--src/asset-manager.cpp38
1 files changed, 16 insertions, 22 deletions
diff --git a/src/asset-manager.cpp b/src/asset-manager.cpp
index f652b64..6ff4600 100644
--- a/src/asset-manager.cpp
+++ b/src/asset-manager.cpp
@@ -1,6 +1,7 @@
#include "asset-manager.hpp"
+#include "bucketed-array.hpp"
#include "thread_pool.hpp"
#include <chrono>
@@ -10,11 +11,7 @@
const PkeHandleItemIndex_T maxAssetItemsPerBucket = 64;
-struct AssetBucket {
- Asset assets[maxAssetItemsPerBucket];
-};
-
-BucketContainer<AssetBucket, AssetHandle> Asset_BucketContainer{};
+BucketContainer<Asset, AssetHandle> Asset_BucketContainer{};
ThreadPoolHandle assetThreadPool = ThreadPoolHandle_MAX;
@@ -26,7 +23,7 @@ AssetKey EngineDefinedAssets[EngineDefinedAssetCount] = {
};
void AM_Init() {
- Buckets_Init(Asset_BucketContainer);
+ Buckets_Init(Asset_BucketContainer, maxAssetItemsPerBucket);
assetThreadPool = PkeThreads_Init(2, 255);
AM_Register(EngineDefinedAssets[0], PKE_ASSET_TYPE_SHADER, "assets/shaders/present.vert.spv");
AM_Register(EngineDefinedAssets[1], PKE_ASSET_TYPE_SHADER, "assets/shaders/present.frag.spv");
@@ -57,8 +54,8 @@ inline Asset *AM_Get_Inner(AssetKey key) {
count = maxAssetItemsPerBucket;
}
for (long i = 0; i < count; ++i) {
- if (strncmp(key, Asset_BucketContainer.buckets[b].assets[i].key, 16) == 0) {
- return &Asset_BucketContainer.buckets[b].assets[i];
+ if (strncmp(key, Asset_BucketContainer.buckets[b][i].key, 16) == 0) {
+ return &Asset_BucketContainer.buckets[b][i];
}
}
}
@@ -73,9 +70,8 @@ AssetHandle AM_Register(AssetKey key, AssetType type, const void *data, int64_t
if (searchedAsset != nullptr) {
return searchedAsset->handle;
}
- bool moved;
- AssetHandle assetHandle{Buckets_NewHandle<AssetBucket>(maxAssetItemsPerBucket, Asset_BucketContainer, moved)};
- Asset &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex].assets[assetHandle.itemIndex];
+ AssetHandle assetHandle{Buckets_NewHandle(Asset_BucketContainer)};
+ Asset &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex][assetHandle.itemIndex];
new (&asset) Asset{};
asset.handle = assetHandle;
strncpy(asset.key, key, AssetKeyLength);
@@ -93,9 +89,8 @@ AssetHandle AM_Register(AssetKey key, AssetType type, const char *path) {
if (searchedAsset != nullptr) {
return searchedAsset->handle;
}
- bool moved = false;
- AssetHandle assetHandle{Buckets_NewHandle<AssetBucket>(maxAssetItemsPerBucket, Asset_BucketContainer, moved)};
- Asset &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex].assets[assetHandle.itemIndex];
+ AssetHandle assetHandle{Buckets_NewHandle(Asset_BucketContainer)};
+ Asset &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex][assetHandle.itemIndex];
new (&asset) Asset{};
asset.handle = assetHandle;
strncpy(asset.key, key, AssetKeyLength);
@@ -126,9 +121,8 @@ AssetHandle AM_Register(const char *path, AssetType type) {
return searchedAsset->handle;
}
- bool moved = false;
- AssetHandle assetHandle{Buckets_NewHandle<AssetBucket>(maxAssetItemsPerBucket, Asset_BucketContainer, moved)};
- Asset &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex].assets[assetHandle.itemIndex];
+ AssetHandle assetHandle{Buckets_NewHandle(Asset_BucketContainer)};
+ Asset &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex][assetHandle.itemIndex];
new (&asset) Asset{};
asset.handle = assetHandle;
strncpy(asset.key, assetKey, AssetKeyLength);
@@ -149,7 +143,7 @@ AssetHandle AM_Register(const char *path, AssetType type) {
void AM_Release(AssetHandle assetHandle) {
assert(assetHandle != AssetHandle_MAX);
- Asset &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex].assets[assetHandle.itemIndex];
+ Asset &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex][assetHandle.itemIndex];
asset.referenceCount -= 1;
assert(asset.referenceCount >= 0 && "asset was unloaded more times than it was retrieved");
}
@@ -157,7 +151,7 @@ void AM_Release(AssetHandle assetHandle) {
const Asset *AM_Get(AssetHandle assetHandle) {
auto validationResult = ValidateHandle(assetHandle, Asset_BucketContainer.pkeHandle, maxAssetItemsPerBucket);
assert(validationResult == 0);
- auto &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex].assets[assetHandle.itemIndex];
+ auto &asset = Asset_BucketContainer.buckets[assetHandle.bucketIndex][assetHandle.itemIndex];
if (asset.state == PKE_ASSET_LOADING_STATE_LOADED) {
asset.referenceCount += 1;
return &asset;
@@ -207,7 +201,7 @@ Asset *AM_GetAssets(uint64_t bucketIndex, uint64_t &itemCount) {
} else {
itemCount = maxAssetItemsPerBucket;
}
- return Asset_BucketContainer.buckets[bucketIndex].assets;
+ return Asset_BucketContainer.buckets[bucketIndex];
}
void AM_DebugPrint() {
@@ -216,7 +210,7 @@ void AM_DebugPrint() {
auto &bkt = Asset_BucketContainer.buckets[b];
uint64_t counter = b == Asset_BucketContainer.pkeHandle.bucketIndex ? Asset_BucketContainer.pkeHandle.itemIndex : maxAssetItemsPerBucket;
for (uint64_t i = 0; i < counter; ++i) {
- auto &asset = bkt.assets[i];
+ auto &asset = bkt[i];
/*
if (asset.size == 0)
continue;
@@ -240,7 +234,7 @@ void AM_DebugPrint() {
void AM_GC() {
for (long b = 0; b <= Asset_BucketContainer.pkeHandle.bucketIndex; ++b) {
for (long i = 0; i < Asset_BucketContainer.pkeHandle.itemIndex; ++i) {
- Asset &asset = Asset_BucketContainer.buckets[b].assets[i];
+ Asset &asset = Asset_BucketContainer.buckets[b][i];
if (asset.referenceCount > 0)
continue;
if (asset.ptr != nullptr && asset.ptr != CAFE_BABE(void)) {