Updated RenderDoc interface.

This commit is contained in:
Бранимир Караџић
2025-10-26 22:43:43 -07:00
parent 86036d7262
commit 52bac63cd7
2 changed files with 53 additions and 16 deletions

View File

@@ -20,6 +20,8 @@
# endif // WIN32_LEAN_AND_MEAN
# include <windows.h>
# include <psapi.h>
#elif BX_PLATFORM_LINUX
# include <link.h> // dl_iterate_phdr
#endif // BX_PLATFORM_*
BX_ERROR_RESULT(BGFX_ERROR_TEXTURE_VALIDATION, BX_MAKEFOURCC('b', 'g', 0, 1) );
@@ -2663,11 +2665,39 @@ namespace bgfx
}
}
}
#else
BX_UNUSED(_name);
#endif // BX_PLATFORM_WINDOWS
return NULL;
#elif BX_PLATFORM_LINUX
struct DlIterateCallbackData
{
const char* name;
void* ptr;
} cbData =
{
.name = _name,
.ptr = NULL,
};
auto dlIterateCb = [](struct dl_phdr_info* _info, size_t /* _size */, void* _data) -> int
{
DlIterateCallbackData& data = *(DlIterateCallbackData*)_data;
if (bx::hasSuffix(_info->dlpi_name, data.name) )
{
data.ptr = dlopen(_info->dlpi_name, RTLD_NOW | RTLD_NOLOAD);
return 1;
}
return 0;
};
dl_iterate_phdr(dlIterateCb, &cbData);
return cbData.ptr;
#else
BX_UNUSED(_name);
return NULL;
#endif // BX_PLATFORM_WINDOWS
}
bool windowsVersionIs(Condition::Enum _op, uint32_t _version, uint32_t _build)

View File

@@ -11,7 +11,7 @@
namespace bgfx
{
pRENDERDOC_GetAPI RENDERDOC_GetAPI;
static RENDERDOC_API_1_1_2* s_renderDoc = NULL;
static RENDERDOC_API_1_6_0* s_renderDoc = NULL;
static void* s_renderDocDll = NULL;
void* loadRenderDoc()
@@ -27,18 +27,25 @@ namespace bgfx
return NULL;
}
const char* renderDocDllName =
#if BX_PLATFORM_WINDOWS
"renderdoc.dll"
#else
"librenderdoc.so"
#endif // BX_PLATFORM_WINDOWS
;
// If RenderDoc is already injected in the process then use the already present DLL
void* renderDocDll = findModule("renderdoc.dll");
void* renderDocDll = findModule(renderDocDllName);
if (NULL == renderDocDll)
{
// TODO: try common installation paths before looking in current directory
renderDocDll = bx::dlopen(
#if BX_PLATFORM_WINDOWS
"renderdoc.dll"
#else
"./librenderdoc.so"
#endif // BX_PLATFORM_WINDOWS
);
BX_TRACE("Loading RenderDoc...");
renderDocDll = bx::dlopen(renderDocDllName);
}
else
{
BX_TRACE("RenderDoc is already loaded.");
}
if (NULL != renderDocDll)
@@ -46,7 +53,7 @@ namespace bgfx
RENDERDOC_GetAPI = (pRENDERDOC_GetAPI)bx::dlsym(renderDocDll, "RENDERDOC_GetAPI");
if (NULL != RENDERDOC_GetAPI
&& 1 == RENDERDOC_GetAPI(eRENDERDOC_API_Version_1_1_2, (void**)&s_renderDoc) )
&& 1 == RENDERDOC_GetAPI(eRENDERDOC_API_Version_1_6_0, (void**)&s_renderDoc) )
{
s_renderDoc->SetCaptureFilePathTemplate(BGFX_CONFIG_RENDERDOC_LOG_FILEPATH);
@@ -55,8 +62,8 @@ namespace bgfx
RENDERDOC_InputButton captureKeys[] = BGFX_CONFIG_RENDERDOC_CAPTURE_KEYS;
s_renderDoc->SetCaptureKeys(captureKeys, BX_COUNTOF(captureKeys) );
s_renderDoc->SetCaptureOptionU32(eRENDERDOC_Option_AllowVSync, 1);
s_renderDoc->SetCaptureOptionU32(eRENDERDOC_Option_SaveAllInitials, 1);
s_renderDoc->SetCaptureOptionU32(eRENDERDOC_Option_AllowVSync, 1);
s_renderDoc->SetCaptureOptionU32(eRENDERDOC_Option_APIValidation, 1);
s_renderDoc->MaskOverlayBits(eRENDERDOC_Overlay_None, eRENDERDOC_Overlay_None);