diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-08-21 21:45:38 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-08-21 21:45:38 -0400 |
| commit | 8bbef6b1f8fe61ae8b0f24693af28b7fa6e68237 (patch) | |
| tree | eaddcd8a1f6f735dc6ea2fe3380e5fe1c90754e6 /src | |
| parent | 77d547596c23d5878fee417d3aa0a3bf38037e65 (diff) | |
pke: embed shaders in executable
Diffstat (limited to 'src')
| -rw-r--r-- | src/asset-manager.cpp | 34 | ||||
| -rw-r--r-- | src/asset-manager.hpp | 8 | ||||
| -rw-r--r-- | src/asset-types.h | 7 | ||||
| -rw-r--r-- | src/project.cpp | 5 | ||||
| -rw-r--r-- | src/window.cpp | 21 |
5 files changed, 34 insertions, 41 deletions
diff --git a/src/asset-manager.cpp b/src/asset-manager.cpp index 7d595ce..5eef783 100644 --- a/src/asset-manager.cpp +++ b/src/asset-manager.cpp @@ -1,6 +1,7 @@ #include "asset-manager.hpp" +#include "embedded-shaders.h" #include "pk.h" #include "thread-pool.hpp" @@ -14,30 +15,13 @@ struct Asset_Master { ThreadPoolHandle thread_pool = ThreadPoolHandle_MAX; } asset_mstr; -AssetKey EngineDefinedAssets[EngineDefinedAssetCount] = { - "pke_prsnt_vrt\0\0", - "pke_prsnt_frg\0\0", - "pke_txtr_vrt\0\0\0", - "pke_txtr_frg\0\0\0", - "pke_glyph_vrt\0\0", - "pke_glyph_frg\0\0", - "pke_ui_bs_vrt\0\0", - "pke_ui_bs_frg\0\0", - "pke_ui_txt_frg\0", -}; - void AM_Init() { + int i; new (&asset_mstr.bc) pk_bkt_arr_t<Asset>{ pk_bkt_arr_handle_MAX_constexpr }; asset_mstr.thread_pool = PkeThreads_Init(2, 255); - AM_Register(EngineDefinedAssets[0], PKE_ASSET_TYPE_SHADER, "assets/shaders/present.vert.spv", nullptr); - AM_Register(EngineDefinedAssets[1], PKE_ASSET_TYPE_SHADER, "assets/shaders/present.frag.spv", nullptr); - AM_Register(EngineDefinedAssets[2], PKE_ASSET_TYPE_SHADER, "assets/shaders/vertex.vert.spv", nullptr); - AM_Register(EngineDefinedAssets[3], PKE_ASSET_TYPE_SHADER, "assets/shaders/texture.frag.spv", nullptr); - AM_Register(EngineDefinedAssets[4], PKE_ASSET_TYPE_SHADER, "assets/shaders/glyph.vert.spv", nullptr); - AM_Register(EngineDefinedAssets[5], PKE_ASSET_TYPE_SHADER, "assets/shaders/glyph.frag.spv", nullptr); - AM_Register(EngineDefinedAssets[6], PKE_ASSET_TYPE_SHADER, "assets/shaders/ui-base.vert.spv", nullptr); - AM_Register(EngineDefinedAssets[7], PKE_ASSET_TYPE_SHADER, "assets/shaders/ui-base.frag.spv", nullptr); - AM_Register(EngineDefinedAssets[8], PKE_ASSET_TYPE_SHADER, "assets/shaders/ui-txtr.frag.spv", nullptr); + for (i = 0; i < embedded_shader_index_count; ++i) { + AM_Register_Static(embedded_shaders[i].name, PKE_ASSET_TYPE_SHADER, embedded_shaders[i].data, embedded_shaders[i].size, nullptr); + } } void AM_Load_Task(Asset &asset) { @@ -256,6 +240,10 @@ void AM_GC() { auto asset_iter_fn = [](void *user_data, void *arr_obj_data) { (void)user_data; Asset &asset = *reinterpret_cast<Asset *>(arr_obj_data); + if (PK_HAS_FLAG(asset.flags, PKE_ASSET_FLAGS_MEM_STATIC)) { + fprintf(stdout, "[AM_GC] Asset '%.16s' is static, skipping.", asset.key); + return; + } switch (asset.state) { case PKE_ASSET_LOADING_STATE_LOADING: fprintf(stdout, "[AM_GC] Asset '%.16s' is still loading.", asset.key); @@ -267,7 +255,7 @@ void AM_GC() { fprintf(stdout, "[AM_GC] Asset '%.16s' still in use, count: %i\n", asset.key, asset.referenceCount); return; } - if (asset.ptr != nullptr && asset.ptr != CAFE_BABE(void) && !PK_HAS_FLAG(asset.flags, PKE_ASSET_FLAGS_MEM_STATIC)) { + if (asset.ptr != nullptr && asset.ptr != CAFE_BABE(void)) { pk_delete_base(asset.ptr, asset.size); fprintf(stdout, "[AM_GC] Asset '%.16s' not in use, freeing.\n", asset.key); } @@ -280,7 +268,7 @@ void AM_GC() { } void AM_Teardown() { + PkeThreads_Teardown(asset_mstr.thread_pool); AM_GC(); pk_bkt_arr_teardown(&asset_mstr.bc); - PkeThreads_Teardown(asset_mstr.thread_pool); } diff --git a/src/asset-manager.hpp b/src/asset-manager.hpp index f8ff6a8..d52145f 100644 --- a/src/asset-manager.hpp +++ b/src/asset-manager.hpp @@ -3,6 +3,8 @@ #include "pk.h" +#include "asset-types.h" + #include <cstdint> #include <future> @@ -14,9 +16,6 @@ TypeSafeInt_constexpr(AssetLoadingState, uint8_t, 0xFF); TypeSafeInt_constexpr(AssetType, uint8_t, 0xFF); TypeSafeInt_constexpr(AssetFlags, uint8_t, 0xFF); -const int64_t AssetKeyLength = 16; -using AssetKey = char[AssetKeyLength]; - const AssetLoadingState PKE_ASSET_LOADING_STATE_UNLOADED = AssetLoadingState {0}; const AssetLoadingState PKE_ASSET_LOADING_STATE_LOADING = AssetLoadingState {1}; const AssetLoadingState PKE_ASSET_LOADING_STATE_LOADED = AssetLoadingState {2}; @@ -33,9 +32,6 @@ const AssetType PKE_ASSET_TYPE_ALL = AssetType {0xFF}; const AssetFlags PKE_ASSET_FLAGS_NONE = AssetFlags {0x00}; const AssetFlags PKE_ASSET_FLAGS_MEM_STATIC = AssetFlags {0x01}; -constexpr int64_t EngineDefinedAssetCount = 9; -extern AssetKey EngineDefinedAssets[EngineDefinedAssetCount]; - union pke_asset_details { struct pke_asset_details_shader { } shader; diff --git a/src/asset-types.h b/src/asset-types.h new file mode 100644 index 0000000..8fbb793 --- /dev/null +++ b/src/asset-types.h @@ -0,0 +1,7 @@ +#ifndef PKE_ASSET_TYPES_H +#define PKE_ASSET_TYPES_H + +#define AssetKeyLength 16l +typedef char AssetKey[AssetKeyLength]; + +#endif /* PKE_ASSET_TYPES_H */ diff --git a/src/project.cpp b/src/project.cpp index c981f03..00c4c1f 100644 --- a/src/project.cpp +++ b/src/project.cpp @@ -3,6 +3,7 @@ #include "asset-manager.hpp" #include "components.hpp" +#include "embedded-shaders.h" #include "pk.h" #include "plugins.hpp" #include "entities.hpp" @@ -417,8 +418,8 @@ void PkeProject_Save(const char *filePath) { // TODO 2025-05-30 JCB // This should be a flag bool isGlobalAsset = false; - for (long k = 0; k < EngineDefinedAssetCount; ++k) { - if (strncmp(EngineDefinedAssets[k], arr_obj_data->key, AssetKeyLength) == 0) { + for (long k = 0; k < embedded_shader_index_count; ++k) { + if (strncmp(embedded_shaders[k].name, arr_obj_data->key, AssetKeyLength) == 0) { isGlobalAsset = true; break; } diff --git a/src/window.cpp b/src/window.cpp index 773c767..a0e33f6 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -9,6 +9,7 @@ #include "asset-manager.hpp" #include "camera.hpp" #include "ecs.hpp" +#include "embedded-shaders.h" #include "font.hpp" #include "game-settings.hpp" #include "math-helpers.hpp" @@ -1825,8 +1826,8 @@ void CreatePresentPipeline() { assert(pkvk_present.descriptor_sets == nullptr || pkvk_present.descriptor_sets == CAFE_BABE(VkDescriptorSet)); // enqueue asset loading - AssetHandle vertShaderAsset{AM_GetHandle(AssetKey{"pke_prsnt_vrt\0\0"})}; - AssetHandle fragShaderAsset{AM_GetHandle(AssetKey{"pke_prsnt_frg\0\0"})}; + AssetHandle vertShaderAsset{AM_GetHandle(embedded_shaders[embedded_shader_index_present_vert].name)}; + AssetHandle fragShaderAsset{AM_GetHandle(embedded_shaders[embedded_shader_index_present_frag].name)}; VkPipelineShaderStageCreateInfo shaderStages[2]; for (long i = 0; i < 2; ++i) { @@ -2262,13 +2263,13 @@ void CreateGraphicsPipelines() { // pipelines { // enqueue asset loading - AssetHandle vertShaderAssetHandle{AM_GetHandle(AssetKey{"pke_txtr_vrt\0\0\0"})}; - AssetHandle textureFragShaderAssetHandle { AM_GetHandle(AssetKey{"pke_txtr_frg\0\0\0"})}; - AssetHandle vertGlyphAssetHandle{AM_GetHandle(AssetKey{"pke_glyph_vrt\0\0"})}; - AssetHandle fragGlyphAssetHandle { AM_GetHandle(AssetKey{"pke_glyph_frg\0\0"})}; - AssetHandle asset_handle_vert_ui_base { AM_GetHandle(AssetKey{"pke_ui_bs_vrt\0\0"})}; - AssetHandle asset_handle_frag_ui_base { AM_GetHandle(AssetKey{"pke_ui_bs_frg\0\0"})}; - AssetHandle asset_handle_frag_ui_txtr { AM_GetHandle(AssetKey{"pke_ui_txt_frg\0"})}; + AssetHandle vertShaderAssetHandle { AM_GetHandle(embedded_shaders[embedded_shader_index_3d_vert].name)}; + AssetHandle textureFragShaderAssetHandle { AM_GetHandle(embedded_shaders[embedded_shader_index_3d_frag].name)}; + AssetHandle vertGlyphAssetHandle { AM_GetHandle(embedded_shaders[embedded_shader_index_glyph_vert].name)}; + AssetHandle fragGlyphAssetHandle { AM_GetHandle(embedded_shaders[embedded_shader_index_glyph_frag].name)}; + AssetHandle asset_handle_vert_ui_base { AM_GetHandle(embedded_shaders[embedded_shader_index_ui_base_vert].name)}; + AssetHandle asset_handle_frag_ui_base { AM_GetHandle(embedded_shaders[embedded_shader_index_ui_base_frag].name)}; + AssetHandle asset_handle_frag_ui_txtr { AM_GetHandle(embedded_shaders[embedded_shader_index_ui_texture_frag].name)}; const long vertexBindingCount = 4; long index = 0; @@ -4206,7 +4207,7 @@ VkShaderModule UploadShader(AssetHandle handle) { return NULL; } #ifndef NDEBUG - fprintf(stdout, "Uploading Shader: '%s'\n", asset->basePath); + fprintf(stdout, "Uploading Shader: '%s'\n", asset->key); #endif VkShaderModuleCreateInfo createInfo; |
