aurora: Add pipeline progress window

This commit is contained in:
Luke Street 2022-05-03 19:36:30 -04:00
parent 64baad395a
commit ad90e4b511
4 changed files with 48 additions and 9 deletions

View File

@ -1291,6 +1291,7 @@ void ImGuiConsole::PreUpdate() {
ShowDebugOverlay();
ShowInputViewer();
ShowPlayerTransformEditor();
ShowPipelineProgress();
}
void ImGuiConsole::PostUpdate() {
@ -1707,4 +1708,29 @@ void ImGuiConsole::ShowPlayerTransformEditor() {
}
ImGui::End();
}
void ImGuiConsole::ShowPipelineProgress() {
if (aurora::gfx::queuedPipelines == 0) {
return;
}
const auto* viewport = ImGui::GetMainViewport();
const auto padding = viewport->WorkPos.y + 10.f;
const auto halfWidth = viewport->GetWorkCenter().x;
ImGui::SetNextWindowPos(ImVec2{halfWidth, padding}, ImGuiCond_Always, ImVec2{0.5f, 0.f});
ImGui::SetNextWindowSize(ImVec2{halfWidth, 0.f}, ImGuiCond_Always);
ImGui::SetNextWindowBgAlpha(0.65f);
ImGui::Begin("Pipelines", nullptr,
ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoMove |
ImGuiWindowFlags_NoSavedSettings);
const u32 totalPipelines = aurora::gfx::queuedPipelines + aurora::gfx::createdPipelines;
const auto percent = static_cast<float>(aurora::gfx::createdPipelines) / static_cast<float>(totalPipelines);
const auto progressStr =
fmt::format(FMT_STRING("Processing pipelines: {} / {}"), aurora::gfx::createdPipelines, totalPipelines);
const auto textSize = ImGui::CalcTextSize(progressStr.data(), progressStr.data() + progressStr.size());
ImGui::NewLine();
ImGui::SameLine(ImGui::GetWindowWidth() / 2.f - textSize.x + textSize.x / 2.f);
ImGuiStringViewText(progressStr);
ImGui::ProgressBar(percent);
ImGui::End();
}
} // namespace metaforce

View File

@ -115,5 +115,6 @@ private:
void SetOverlayWindowLocation(int corner) const;
void ShowCornerContextMenu(int& corner, int avoidCorner) const;
void ShowPlayerTransformEditor();
void ShowPipelineProgress();
};
} // namespace metaforce

View File

@ -125,7 +125,7 @@ static PipelineRef g_currentPipeline;
static std::vector<Command> g_commands;
static ByteBuffer g_serializedPipelines;
static ByteBuffer g_serializedPipelines{};
static u32 g_serializedPipelineCount = 0;
template <typename PipelineConfig>
@ -320,7 +320,6 @@ void initialize() {
g_state.stream = stream::construct_state();
g_state.model = model::construct_state();
g_serializedPipelines = {};
{
// Load serialized pipeline cache
std::ifstream file("pipeline_cache.bin", std::ios::in | std::ios::binary | std::ios::ate);
@ -342,20 +341,33 @@ void initialize() {
offset += sizeof(u32);
switch (type) {
case ShaderType::MoviePlayer: {
const movie_player::PipelineConfig config =
if (size != sizeof(movie_player::PipelineConfig)) {
break;
}
const auto config =
*reinterpret_cast<const movie_player::PipelineConfig*>(g_serializedPipelines.data() + offset);
find_pipeline(
type, config, [=]() { return movie_player::create_pipeline(g_state.moviePlayer, config); }, false);
} break;
case ShaderType::Stream: {
const stream::PipelineConfig config =
*reinterpret_cast<const stream::PipelineConfig*>(g_serializedPipelines.data() + offset);
if (size != sizeof(stream::PipelineConfig)) {
break;
}
const auto config = *reinterpret_cast<const stream::PipelineConfig*>(g_serializedPipelines.data() + offset);
if (config.version != gx::GXPipelineConfigVersion) {
break;
}
find_pipeline(
type, config, [=]() { return stream::create_pipeline(g_state.stream, config); }, false);
} break;
case ShaderType::Model: {
const model::PipelineConfig config =
*reinterpret_cast<const model::PipelineConfig*>(g_serializedPipelines.data() + offset);
if (size != sizeof(model::PipelineConfig)) {
break;
}
const auto config = *reinterpret_cast<const model::PipelineConfig*>(g_serializedPipelines.data() + offset);
if (config.version != gx::GXPipelineConfigVersion) {
break;
}
find_pipeline(
type, config, [=]() { return model::create_pipeline(g_state.model, config); }, false);
} break;

View File

@ -119,8 +119,8 @@ void ImGuiEngine_Initialize(float scale) {
colors[ImGuiCol_TabUnfocusedActive] = ImVec4(0.11f, 0.15f, 0.17f, 1.00f);
colors[ImGuiCol_PlotLines] = ImVec4(0.61f, 0.61f, 0.61f, 1.00f);
colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f);
colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f);
colors[ImGuiCol_PlotHistogram] = ImVec4(0.06f, 0.53f, 0.98f, 1.00f);
colors[ImGuiCol_PlotHistogramHovered] = ImVec4(0.28f, 0.56f, 1.00f, 1.00f);
colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f);
colors[ImGuiCol_NavHighlight] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);