mirror of
https://github.com/bkaradzic/bgfx.git
synced 2026-02-17 20:52:36 +01:00
Added Superluminal Profiler support. (#3504)
This commit is contained in:
committed by
GitHub
parent
8a6a40108a
commit
d396404fd3
96
src/bgfx.cpp
96
src/bgfx.cpp
@@ -69,10 +69,99 @@ namespace bgfx
|
||||
}
|
||||
#endif // BGFX_CONFIG_USE_TINYSTL
|
||||
|
||||
struct Superluminal
|
||||
{
|
||||
struct SuppressTailCallOptimization
|
||||
{
|
||||
int64_t SuppressTailCall[3];
|
||||
};
|
||||
|
||||
typedef void (*SuperluminalBeginEventtFn)(const char* _inID, const char* _inData, uint32_t _inColor);
|
||||
typedef SuppressTailCallOptimization(*SuperluminalEndEventFn)();
|
||||
|
||||
static void stubSuperluminalBeginEvent(const char* _inID, const char* _inData, uint32_t _inColor)
|
||||
{
|
||||
BX_UNUSED(_inID, _inData, _inColor);
|
||||
}
|
||||
|
||||
static SuppressTailCallOptimization stubSuperluminalEndEvent()
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
bool init()
|
||||
{
|
||||
if (!BX_ENABLED(BGFX_CONFIG_PROFILER) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
const char* superluminalDllName = "PerformanceAPI.dll";
|
||||
superluminalDll = bx::dlopen(superluminalDllName);
|
||||
|
||||
if (NULL != superluminalDll)
|
||||
{
|
||||
void* funcPtrs[11];
|
||||
|
||||
typedef int (*PerformanceAPI_GetAPI)(int32_t _version, void** _funcPtrs);
|
||||
|
||||
constexpr int32_t version = 0x30000;
|
||||
|
||||
PerformanceAPI_GetAPI getApi = bx::dlsym<PerformanceAPI_GetAPI>(superluminalDll, "PerformanceAPI_GetAPI");
|
||||
if (NULL == getApi)
|
||||
{
|
||||
BX_TRACE("Failed to obtain Superluminal's %s GetAPI function!", superluminalDllName);
|
||||
bx::dlclose(superluminalDll);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (getApi(version, funcPtrs) )
|
||||
{
|
||||
BX_TRACE("Superluminal's PerformanceAPI.dll is loaded!");
|
||||
beginEvent = (SuperluminalBeginEventtFn)funcPtrs[2];
|
||||
endEvent = (SuperluminalEndEventFn )funcPtrs[6];
|
||||
return true;
|
||||
}
|
||||
|
||||
BX_TRACE("Failed to obtain Superluminal's %s GetAPI function!", superluminalDllName);
|
||||
bx::dlclose(superluminalDll);
|
||||
}
|
||||
else
|
||||
{
|
||||
BX_TRACE("Failed to load Superluminal's %s!", superluminalDllName);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void shutdown()
|
||||
{
|
||||
if (NULL != superluminalDll)
|
||||
{
|
||||
bx::dlclose(superluminalDll);
|
||||
superluminalDll = NULL;
|
||||
beginEvent = stubSuperluminalBeginEvent;
|
||||
endEvent = stubSuperluminalEndEvent;
|
||||
}
|
||||
}
|
||||
|
||||
void* superluminalDll = NULL;
|
||||
SuperluminalBeginEventtFn beginEvent = stubSuperluminalBeginEvent;
|
||||
SuperluminalEndEventFn endEvent = stubSuperluminalEndEvent;
|
||||
};
|
||||
|
||||
struct CallbackStub : public CallbackI
|
||||
{
|
||||
Superluminal m_superluminal;
|
||||
|
||||
CallbackStub()
|
||||
{
|
||||
m_superluminal.init();
|
||||
}
|
||||
|
||||
virtual ~CallbackStub()
|
||||
{
|
||||
m_superluminal.shutdown();
|
||||
}
|
||||
|
||||
virtual void fatal(const char* _filePath, uint16_t _line, Fatal::Enum _code, const char* _str) override
|
||||
@@ -108,16 +197,19 @@ namespace bgfx
|
||||
bx::debugOutput(out);
|
||||
}
|
||||
|
||||
virtual void profilerBegin(const char* /*_name*/, uint32_t /*_abgr*/, const char* /*_filePath*/, uint16_t /*_line*/) override
|
||||
virtual void profilerBegin(const char* _name, uint32_t _abgr, const char* /*_filePath*/, uint16_t /*_line*/) override
|
||||
{
|
||||
m_superluminal.beginEvent(" ", _name, _abgr);
|
||||
}
|
||||
|
||||
virtual void profilerBeginLiteral(const char* /*_name*/, uint32_t /*_abgr*/, const char* /*_filePath*/, uint16_t /*_line*/) override
|
||||
virtual void profilerBeginLiteral(const char* _name, uint32_t _abgr, const char* /*_filePath*/, uint16_t /*_line*/) override
|
||||
{
|
||||
m_superluminal.beginEvent(_name, NULL, _abgr);
|
||||
}
|
||||
|
||||
virtual void profilerEnd() override
|
||||
{
|
||||
m_superluminal.endEvent();
|
||||
}
|
||||
|
||||
virtual uint32_t cacheReadSize(uint64_t /*_id*/) override
|
||||
|
||||
@@ -297,6 +297,8 @@ namespace bgfx
|
||||
;
|
||||
}
|
||||
|
||||
// Palette:
|
||||
// https://colorkit.co/color-palette-generator/a8e6cf-dcedc1-ffd3b6-76b4bd-bdeaee-8874a3-ff0000-ff8b94/
|
||||
constexpr uint32_t kColorFrame = toAbgr8(0xa8, 0xe6, 0xcf);
|
||||
constexpr uint32_t kColorSubmit = toAbgr8(0xdc, 0xed, 0xc1);
|
||||
constexpr uint32_t kColorView = toAbgr8(0xff, 0xd3, 0xb6);
|
||||
|
||||
Reference in New Issue
Block a user