Path: blob/main_old/src/tests/test_utils/RenderDoc.cpp
1693 views
//1// Copyright 2021 The ANGLE Project Authors. All rights reserved.2// Use of this source code is governed by a BSD-style license that can be3// found in the LICENSE file.4//5// RenderDoc:6// Connection to renderdoc for capturing tests through its API.7//89#include "RenderDoc.h"1011#include "common/angleutils.h"12#include "common/debug.h"1314RenderDoc::RenderDoc() : mRenderDocModule(nullptr), mApi(nullptr) {}1516RenderDoc::~RenderDoc()17{18SafeDelete(mRenderDocModule);19}2021#if defined(ANGLE_PLATFORM_ANDROID) || defined(ANGLE_PLATFORM_LINUX) || \22defined(ANGLE_PLATFORM_WINDOWS)23# include "third_party/renderdoc/src/renderdoc_app.h"2425# if defined(ANGLE_PLATFORM_WINDOWS)26constexpr char kRenderDocModuleName[] = "renderdoc";27# elif defined(ANGLE_PLATFORM_ANDROID)28constexpr char kRenderDocModuleName[] = "libVkLayer_GLES_RenderDoc";29# else30constexpr char kRenderDocModuleName[] = "librenderdoc";31# endif3233void RenderDoc::attach()34{35mRenderDocModule = OpenSharedLibrary(kRenderDocModuleName, angle::SearchType::AlreadyLoaded);36if (mRenderDocModule == nullptr || mRenderDocModule->getNative() == nullptr)37{38return;39}40void *getApi = mRenderDocModule->getSymbol("RENDERDOC_GetAPI");41if (getApi == nullptr)42{43return;44}4546int result = reinterpret_cast<pRENDERDOC_GetAPI>(getApi)(eRENDERDOC_API_Version_1_1_2, &mApi);47if (result != 1)48{49ERR() << "RenderDoc module is present but API 1.1.2 is unavailable";50mApi = nullptr;51}52}5354void RenderDoc::startFrame()55{56if (mApi)57{58static_cast<RENDERDOC_API_1_1_2 *>(mApi)->StartFrameCapture(nullptr, nullptr);59}60}6162void RenderDoc::endFrame()63{64if (mApi)65{66static_cast<RENDERDOC_API_1_1_2 *>(mApi)->EndFrameCapture(nullptr, nullptr);67}68}6970#else // defiend(ANGLE_PLATFORM_ANDROID) || defined(ANGLE_PLATFORM_LINUX) ||71// defined(ANGLE_PLATFORM_WINDOWS)7273// Stub out the implementation on unsupported platforms.74void RenderDoc::attach()75{76mApi = nullptr;77}7879void RenderDoc::startFrame() {}8081void RenderDoc::endFrame() {}8283#endif // defiend(ANGLE_PLATFORM_ANDROID) || defined(ANGLE_PLATFORM_LINUX) ||84// defined(ANGLE_PLATFORM_WINDOWS)858687