/** * Jingga * * @copyright Jingga * @license OMS License 2.0 * @version 1.0.0 * @link https://jingga.app */ #ifndef TOS_GPUAPI_VULKAN_APP_CMD_BUFFER_H #define TOS_GPUAPI_VULKAN_APP_CMD_BUFFER_H #include "../../stdlib/Types.h" #include "Shader.h" #include "ShaderUtils.h" #include "../ShaderType.h" #include "../../asset/Asset.h" #include "../../command/AppCmdBuffer.h" #include "GpuApiContainer.h" void* cmd_shader_load(AppCmdBuffer*, Command*) { return NULL; } void* cmd_shader_load_sync(AppCmdBuffer* cb, Shader* shader, int32* shader_ids) { char asset_id[9]; GpuApiContainer* gpu_api = (GpuApiContainer *) cb->gpu_api; VkShaderModule shader_assets[SHADER_TYPE_SIZE]; for (int32 i = 0; i < SHADER_TYPE_SIZE; ++i) { shader_assets[i] = NULL; } for (int32 i = 0; i < SHADER_TYPE_SIZE; ++i) { if (!shader_ids[i]) { continue; } else if (shader_ids[i] < 0) { break; } // Load sub asset int_to_hex(shader_ids[i], asset_id); Asset* shader_asset = thrd_ams_get_asset_wait(cb->ams, asset_id); if (!shader_asset) { int32 archive_id = (shader_ids[i] >> 24) & 0xFF; shader_asset = asset_archive_asset_load(&cb->asset_archives[archive_id], shader_ids[i], cb->ams, cb->mem_vol); } // Make sub shader shader_assets[i] = shader_make( ((GpuApiContainer *) cb->gpu_api)->device, (char *) shader_asset->self, shader_asset->ram_size ); shader_asset->state |= ASSET_STATE_RAM_GC; shader_asset->state |= ASSET_STATE_VRAM_GC; } // Make shader/program shader->id = program_make( gpu_api->device, gpu_api->render_pass, &gpu_api->pipeline_layout, &gpu_api->pipeline, shader_assets[0], shader_assets[1], shader_assets[2] ); return NULL; } #endif