Merge pull request #388 from henriquegemignani/feature/optick

Using optick, linked from boo
This commit is contained in:
Phillip Stephens 2021-04-18 17:31:29 -07:00 committed by GitHub
commit f795332d89
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 65 additions and 13 deletions

View File

@ -73,6 +73,7 @@ bool ProjectManager::newProject(hecl::SystemStringView path) {
}
bool ProjectManager::openProject(hecl::SystemStringView path) {
OPTICK_EVENT();
hecl::SystemString subPath;
hecl::ProjectRootPath projPath = hecl::SearchForProject(path, subPath);
if (!projPath) {
@ -166,6 +167,7 @@ bool ProjectManager::saveProject() {
}
void ProjectManager::mainUpdate() {
OPTICK_EVENT();
if (m_precooking) {
if (!m_factoryMP1.IsBusy())
m_precooking = false;

View File

@ -172,6 +172,7 @@ public:
}
void think() override {
OPTICK_EVENT();
if (m_spaceTree)
m_spaceTree->think();
}

View File

@ -50,6 +50,7 @@ void SplashScreen::think() {
m_fileBrowser.m_view.reset();
return;
}
OPTICK_EVENT();
ModalWindow::think();
if (m_fileBrowser.m_view)

View File

@ -18,6 +18,7 @@
#include "hecl/Pipeline.hpp"
#include "version.h"
#include <cstdio>
#include "optick.h"
using YAMLNode = athena::io::YAMLNode;
@ -54,6 +55,7 @@ void ViewManager::TestGameView::draw(boo::IGraphicsCommandQueue* gfxQ) {
}
void ViewManager::TestGameView::think() {
OPTICK_EVENT();
if (!m_debugText) {
m_debugText.reset(new specter::MultiLineTextView(m_vm.m_viewResources, *this, m_vm.m_viewResources.m_monoFont18));
boo::SWindowRect sub = subRect();
@ -356,6 +358,7 @@ bool ViewManager::proc() {
return false;
if (m_updatePf) {
OPTICK_EVENT("m_updatePf");
m_viewResources.resetPixelFactor(m_reqPf);
specter::RootView* root = SetupRootView();
if (m_rootSpace)
@ -368,8 +371,14 @@ bool ViewManager::proc() {
m_updatePf = false;
}
m_rootView->dispatchEvents();
m_rootView->internalThink();
{
OPTICK_EVENT("m_rootView->DispatchEvents");
m_rootView->dispatchEvents();
}
{
OPTICK_EVENT("m_rootView->internalThink");
m_rootView->internalThink();
}
if (m_rootSpace)
m_rootSpace->think();
if (m_splash)
@ -391,19 +400,24 @@ bool ViewManager::proc() {
if (m_testGameView)
m_testGameView->think();
if (g_Renderer)
g_Renderer->BeginScene();
m_rootView->draw(gfxQ);
if (g_Renderer)
g_Renderer->EndScene();
gfxQ->execute();
{
OPTICK_EVENT("Draw");
if (g_Renderer)
g_Renderer->BeginScene();
m_rootView->draw(gfxQ);
if (g_Renderer)
g_Renderer->EndScene();
gfxQ->execute();
}
if (g_ResFactory)
g_ResFactory->AsyncIdle();
#ifndef URDE_MSAN
m_voiceEngine->pumpAndMixVoices();
#endif
if (!m_skipWait || !hecl::com_developer->toBoolean())
if (!m_skipWait || !hecl::com_developer->toBoolean()) {
OPTICK_EVENT("waitForRetrace");
m_mainWindow->waitForRetrace();
}
CBooModel::ClearModelUniformCounters();
CGraphics::TickRenderTimings();
++logvisor::FrameIndex;

View File

@ -9,6 +9,7 @@
#include "hecl/Console.hpp"
#include "fmt/chrono.h"
#include "version.h"
#include "optick.h"
static logvisor::Module AthenaLog("Athena");
static void AthenaExc(athena::error::Level level, const char* file, const char*, int line, fmt::string_view fmt,
@ -71,6 +72,7 @@ struct Application : boo::IApplicationCallback {
initialize(app);
m_viewManager->init(app);
while (m_running.load()) {
OPTICK_FRAME("MainThread");
if (!m_viewManager->proc())
break;
}

View File

@ -78,6 +78,7 @@ CMapArea::CMapArea(CInputStream& in, u32 size)
}
void CMapArea::PostConstruct() {
OPTICK_EVENT();
x38_moStart = x44_buf.get();
x3c_vertexStart = x38_moStart + (x28_mappableObjCount * 0x50);
x40_surfaceStart = x3c_vertexStart + (x2c_vertexCount * 12);

View File

@ -4,6 +4,7 @@
#include <array>
#include <cctype>
#include <iterator>
#include "optick.h"
#include "Runtime/CStopwatch.hpp"
#include "Runtime/IObj.hpp"
@ -35,6 +36,7 @@ bool CFactoryMgr::CanMakeMemory(const metaforce::SObjectTag& tag) const {
CFactoryFnReturn CFactoryMgr::MakeObjectFromMemory(const SObjectTag& tag, std::unique_ptr<u8[]>&& buf, int size,
bool compressed, const CVParamTransfer& paramXfer,
CObjectReference* selfRef) {
OPTICK_EVENT();
std::unique_ptr<u8[]> localBuf = std::move(buf);
const auto memFactoryIter = m_memFactories.find(tag.type);

View File

@ -133,7 +133,7 @@ endfunction()
set(RUNTIME_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
set(RUNTIME_LIBRARIES ${HECL_APPLICATION_REPS_TARGETS_LIST} RetroDataSpec AssetNameMapNull NESEmulator
libjpeg-turbo jbus kabufuda discord-rpc logvisor)
libjpeg-turbo jbus kabufuda discord-rpc logvisor OptickCore)
if(MSVC)
# WTF MS???? LINK.EXE is unable to address static libraries larger than 4GB.

View File

@ -2,6 +2,7 @@
#include "Runtime/CSimplePool.hpp"
#include "Runtime/CStopwatch.hpp"
#include "optick.h"
namespace metaforce {
static logvisor::Module Log("CResFactory");
@ -33,6 +34,7 @@ CFactoryFnReturn CResFactory::BuildSync(const SObjectTag& tag, const CVParamTran
}
bool CResFactory::PumpResource(SLoadingData& data) {
OPTICK_EVENT();
if (data.x8_dvdReq && data.x8_dvdReq->IsComplete()) {
data.x8_dvdReq.reset();
*data.xc_targetPtr =
@ -74,6 +76,7 @@ void CResFactory::BuildAsync(const SObjectTag& tag, const CVParamTransfer& xfer,
}
void CResFactory::AsyncIdle() {
OPTICK_EVENT();
if (m_loadList.empty())
return;
auto startTime = std::chrono::steady_clock::now();

View File

@ -780,6 +780,7 @@ void CStateManager::DrawWorld() {
g_Renderer->SetThermalColdScale(xf28_thermColdScale2 + xf24_thermColdScale1);
for (int i = areaCount - 1; i >= 0; --i) {
OPTICK_EVENT("CStateManager::DrawWorld DrawArea");
const CGameArea& area = *areaArr[i];
SetupFogForArea(area);
g_Renderer->EnablePVS(pvsArr[i], area.x4_selfIdx);
@ -1472,6 +1473,7 @@ void CStateManager::LoadScriptObjects(TAreaId aid, CInputStream& in, std::vector
std::pair<TEditorId, TUniqueId> CStateManager::LoadScriptObject(TAreaId aid, EScriptObjectType type, u32 length,
CInputStream& in) {
OPTICK_EVENT();
const TEditorId id = in.readUint32Big();
const u32 connCount = in.readUint32Big();
length -= 8;

View File

@ -553,6 +553,7 @@ void CAnimData::Render(CSkinnedModel& model, const CModelFlags& drawFlags,
void CAnimData::SetupRender(CSkinnedModel& model, const CModelFlags& drawFlags,
const std::optional<CVertexMorphEffect>& morphEffect, const float* morphMagnitudes) {
OPTICK_EVENT();
if (!x220_30_poseBuilt) {
x2fc_poseBuilder.BuildNoScale(x224_pose);
x220_30_poseBuilt = true;
@ -560,7 +561,9 @@ void CAnimData::SetupRender(CSkinnedModel& model, const CModelFlags& drawFlags,
PoseSkinnedModel(model, x224_pose, drawFlags, morphEffect, morphMagnitudes);
}
void CAnimData::DrawSkinnedModel(CSkinnedModel& model, const CModelFlags& flags) { model.Draw(flags); }
void CAnimData::DrawSkinnedModel(CSkinnedModel& model, const CModelFlags& flags) {
model.Draw(flags);
}
void CAnimData::PreRender() {
if (!x220_31_poseCached) {

View File

@ -25,6 +25,7 @@ CSkinRules::CSkinRules(CInputStream& in) {
void CSkinRules::TransformVerticesCPU(std::vector<std::pair<zeus::CVector3f, zeus::CVector3f>>& vnOut,
const CPoseAsTransforms& pose, const CModel& model) const {
OPTICK_EVENT();
vnOut.resize(m_poolToSkinIdx.size());
for (size_t i = 0; i < m_poolToSkinIdx.size(); ++i) {
const CVirtualBone& vb = m_virtualBones[m_poolToSkinIdx[i]];

View File

@ -223,6 +223,7 @@ CBooRenderer::CAreaListItem::CAreaListItem(const std::vector<CMetroidModelInstan
CBooRenderer::CAreaListItem::~CAreaListItem() = default;
void CBooRenderer::ActivateLightsForModel(CAreaListItem* item, CBooModel& model) {
OPTICK_EVENT();
constexpr size_t lightCount = 4;
std::vector<CLight> thisLights;
thisLights.reserve(lightCount);
@ -767,6 +768,7 @@ void CBooRenderer::DisablePVS() { xc8_pvs = std::nullopt; }
void CBooRenderer::UpdateAreaUniforms(int areaIdx, EWorldShadowMode shadowMode, bool activateLights, int cubeFace,
const CModelFlags* ballShadowFlags) {
OPTICK_EVENT();
SetupRendererStates();
CModelFlags flags;
@ -1067,6 +1069,7 @@ void CBooRenderer::SetViewport(int left, int bottom, int width, int height) {
void CBooRenderer::SetDebugOption(EDebugOption, int) {}
void CBooRenderer::BeginScene() {
OPTICK_EVENT();
CGraphics::SetViewport(0, 0, g_Viewport.x8_width, g_Viewport.xc_height);
CGraphics::SetPerspective(75.f, CGraphics::g_ProjAspect, 1.f, 4096.f);
CGraphics::SetModelMatrix(zeus::CTransform());
@ -1088,6 +1091,7 @@ void CBooRenderer::BeginScene() {
}
void CBooRenderer::EndScene() {
OPTICK_EVENT();
CGraphics::EndScene();
if (x2dc_reflectionAge >= 2) {
// Delete reflection tex x14c_

View File

@ -445,6 +445,7 @@ float CGraphics::GetSecondsMod900() {
}
void CGraphics::TickRenderTimings() {
OPTICK_EVENT();
g_RenderTimings = (g_RenderTimings + 1) % u32(900 * 60);
g_DefaultSeconds = g_RenderTimings / 60.f;
}

View File

@ -3,6 +3,7 @@
#include <array>
#include <vector>
#include <chrono>
#include "optick.h"
#include "Runtime/RetroTypes.hpp"
@ -438,7 +439,7 @@ public:
};
#define SCOPED_GRAPHICS_DEBUG_GROUP(...) GraphicsDebugGroup _GfxDbg_(__VA_ARGS__);
#else
#define SCOPED_GRAPHICS_DEBUG_GROUP(...)
#define SCOPED_GRAPHICS_DEBUG_GROUP(name, ...) OPTICK_EVENT_DYNAMIC(name)
#endif
} // namespace metaforce

View File

@ -23,6 +23,7 @@ hecl::UniformBufferPool<CLineRenderer::SDrawUniform> CLineRenderer::s_uniformPoo
CLineRenderer::CLineRenderer(boo::IGraphicsDataFactory::Context& ctx, EPrimitiveMode mode, u32 maxVerts,
const boo::ObjToken<boo::ITexture>& texture, bool additive, bool zTest, bool zGEqual)
: m_mode(mode), m_maxVerts(maxVerts) {
OPTICK_EVENT();
if (maxVerts < 2) {
LineRendererLog.report(logvisor::Fatal, FMT_STRING(_SYS_STR("maxVerts < 2, maxVerts = {}")), maxVerts);
return;
@ -54,6 +55,7 @@ CLineRenderer::CLineRenderer(boo::IGraphicsDataFactory::Context& ctx, EPrimitive
CLineRenderer::CLineRenderer(EPrimitiveMode mode, u32 maxVerts, const boo::ObjToken<boo::ITexture>& texture,
bool additive, bool zTest, bool zGEqual)
: m_mode(mode), m_maxVerts(maxVerts) {
OPTICK_EVENT();
if (maxVerts < 2) {
LineRendererLog.report(logvisor::Fatal, FMT_STRING(_SYS_STR("maxVerts < 2, maxVerts = {}")), maxVerts);
return;

View File

@ -51,6 +51,7 @@ void CBooModel::Shutdown() {
}
void CBooModel::ClearModelUniformCounters() {
OPTICK_EVENT();
for (CBooModel* model = g_FirstModel; model; model = model->m_next)
model->ClearUniformCounter();
}
@ -244,6 +245,7 @@ GeometryUniformLayout::GeometryUniformLayout(const CModel* model, const Material
}
CBooModel::ModelInstance* CBooModel::PushNewModelInstance(int sharedLayoutBuf, boo::IGraphicsDataFactory::Context* ctx) {
OPTICK_EVENT();
if (!x40_24_texturesLoaded && !g_DummyTextures) {
return nullptr;
}
@ -981,6 +983,7 @@ boo::ObjToken<boo::IGraphicsBufferD> GeometryUniformLayout::GetSharedBuffer(int
boo::ObjToken<boo::IGraphicsBufferD> CBooModel::UpdateUniformData(const CModelFlags& flags, const CSkinRules* cskr,
const CPoseAsTransforms* pose, int sharedLayoutBuf,
boo::IGraphicsDataFactory::Context* ctx) {
OPTICK_EVENT();
if (!g_DummyTextures && !TryLockTextures())
return {};
@ -1154,6 +1157,7 @@ std::unique_ptr<CBooModel> CModel::MakeNewInstance(int shaderIdx, int subInsts,
}
CModelShaders::ShaderPipelines SShader::BuildShader(const hecl::HMDLMeta& meta, const MaterialSet::Material& mat) {
OPTICK_EVENT();
hecl::Backend::ReflectionType reflectionType;
if (mat.flags.samusReflectionIndirectTexture())
reflectionType = hecl::Backend::ReflectionType::Indirect;

View File

@ -53,6 +53,7 @@ void CSkinnedModel::Calculate(const CPoseAsTransforms& pose, const CModelFlags&
}
void CSkinnedModel::Draw(const CModelFlags& drawFlags) const {
OPTICK_EVENT();
if (m_modelInst->TryLockTextures())
m_modelInst->DrawSurfaces(drawFlags);
}

View File

@ -90,6 +90,7 @@ u16 CFluidPlaneShader::Cache::MakeCacheKey(const SFluidPlaneDoorShaderInfo& info
template <>
CFluidPlaneShader::ShaderPair
CFluidPlaneShader::Cache::GetOrBuildShader<SFluidPlaneShaderInfo>(const SFluidPlaneShaderInfo& info) {
OPTICK_EVENT();
u16 key = MakeCacheKey(info);
auto& slot = CacheSlot(info, key);
if (slot.m_regular)
@ -104,6 +105,7 @@ CFluidPlaneShader::Cache::GetOrBuildShader<SFluidPlaneShaderInfo>(const SFluidPl
template <>
CFluidPlaneShader::ShaderPair
CFluidPlaneShader::Cache::GetOrBuildShader<SFluidPlaneDoorShaderInfo>(const SFluidPlaneDoorShaderInfo& info) {
OPTICK_EVENT();
u16 key = MakeCacheKey(info);
auto& slot = CacheSlot(info, key);
if (slot.m_regular)

View File

@ -93,6 +93,7 @@ void CDecalManager::Update(float dt, CStateManager& mgr) {
void CDecalManager::AddDecal(const TToken<CDecalDescription>& decal, const zeus::CTransform& xf, bool notIce,
CStateManager& mgr) {
OPTICK_EVENT();
if (m_LastDecalCreatedIndex != -1 && m_DeltaTimeSinceLastDecalCreation < 0.75f &&
m_LastDecalCreatedAssetId == decal.GetObjectTag()->id) {
SDecal& existingDecal = m_DecalPool[m_LastDecalCreatedIndex];

View File

@ -593,6 +593,7 @@ void CElementGen::UpdatePSTranslationAndOrientation() {
}
std::unique_ptr<CParticleGen> CElementGen::ConstructChildParticleSystem(const TToken<CGenDescription>& desc) const {
OPTICK_EVENT();
auto ret = std::make_unique<CElementGen>(desc, EModelOrientationType::Normal,
x26d_27_enableOPTS ? EOptionalSystemFlags::Two : EOptionalSystemFlags::One);
ret->x26d_26_modelsUseLights = x26d_26_modelsUseLights;

View File

@ -176,6 +176,7 @@ constexpr std::array<s32, 2> CGunWeapon::skShootAnim{4, 3};
void CGunWeapon::Fire(bool underwater, float dt, EChargeState chargeState, const zeus::CTransform& xf,
CStateManager& mgr, TUniqueId homingTarget, float chargeFactor1, float chargeFactor2) {
OPTICK_EVENT();
CDamageInfo dInfo = GetDamageInfo(mgr, chargeState, chargeFactor1);
zeus::CVector3f scale(chargeState == EChargeState::Normal ? 1.f : chargeFactor2);
bool partialCharge = chargeState == EChargeState::Normal ? false : !zeus::close_enough(chargeFactor1, 1.f);

View File

@ -312,6 +312,7 @@ void CFluidPlane::RenderStripWithRipples(float curY, const Heights& heights, con
void CFluidPlane::RenderPatch(const CFluidPlaneRender::SPatchInfo& info, const Heights& heights, const Flags& flags,
bool noRipples, bool flagIs1, std::vector<CFluidPlaneShader::Vertex>& vOut,
std::vector<CFluidPlaneShader::PatchVertex>& pvOut) {
OPTICK_EVENT();
if (noRipples) {
m_shader->bindRegular();

View File

@ -129,6 +129,7 @@ CFluidPlaneShader::RenderSetupInfo CFluidPlaneCPU::RenderSetup(const CStateManag
const zeus::CTransform& xf,
const zeus::CTransform& areaXf, const zeus::CAABox& aabb,
const CScriptWater* water) {
OPTICK_EVENT();
CFluidPlaneShader::RenderSetupInfo out;
const float uvT = mgr.GetFluidPlaneManager()->GetUVT();

2
extern/boo vendored

@ -1 +1 @@
Subproject commit 6335cb09fe5046984e8baa9b5a65de837037e70c
Subproject commit cd25ff4abfeb8c32256447f97a1a829bdbaf262c