| // |
| // Copyright 2021 The ANGLE Project Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // RenderDoc: |
| // Connection to renderdoc for capturing tests through its API. |
| // |
| |
| #include "RenderDoc.h" |
| |
| #include "common/angleutils.h" |
| #include "common/debug.h" |
| |
| RenderDoc::RenderDoc() : mRenderDocModule(nullptr), mApi(nullptr) {} |
| |
| RenderDoc::~RenderDoc() |
| { |
| SafeDelete(mRenderDocModule); |
| } |
| |
| #if defined(ANGLE_PLATFORM_ANDROID) || defined(ANGLE_PLATFORM_LINUX) || \ |
| defined(ANGLE_PLATFORM_WINDOWS) |
| # include "third_party/renderdoc/src/renderdoc_app.h" |
| |
| # if defined(ANGLE_PLATFORM_WINDOWS) |
| constexpr char kRenderDocModuleName[] = "renderdoc"; |
| # elif defined(ANGLE_PLATFORM_ANDROID) |
| constexpr char kRenderDocModuleName[] = "libVkLayer_GLES_RenderDoc"; |
| # else |
| constexpr char kRenderDocModuleName[] = "librenderdoc"; |
| # endif |
| |
| void RenderDoc::attach() |
| { |
| mRenderDocModule = OpenSharedLibrary(kRenderDocModuleName, angle::SearchType::AlreadyLoaded); |
| if (mRenderDocModule == nullptr || mRenderDocModule->getNative() == nullptr) |
| { |
| return; |
| } |
| void *getApi = mRenderDocModule->getSymbol("RENDERDOC_GetAPI"); |
| if (getApi == nullptr) |
| { |
| return; |
| } |
| |
| int result = reinterpret_cast<pRENDERDOC_GetAPI>(getApi)(eRENDERDOC_API_Version_1_1_2, &mApi); |
| if (result != 1) |
| { |
| ERR() << "RenderDoc module is present but API 1.1.2 is unavailable"; |
| mApi = nullptr; |
| } |
| } |
| |
| void RenderDoc::startFrame() |
| { |
| if (mApi) |
| { |
| static_cast<RENDERDOC_API_1_1_2 *>(mApi)->StartFrameCapture(nullptr, nullptr); |
| } |
| } |
| |
| void RenderDoc::endFrame() |
| { |
| if (mApi) |
| { |
| static_cast<RENDERDOC_API_1_1_2 *>(mApi)->EndFrameCapture(nullptr, nullptr); |
| } |
| } |
| |
| #else // defiend(ANGLE_PLATFORM_ANDROID) || defined(ANGLE_PLATFORM_LINUX) || |
| // defined(ANGLE_PLATFORM_WINDOWS) |
| |
| // Stub out the implementation on unsupported platforms. |
| void RenderDoc::attach() |
| { |
| mApi = nullptr; |
| } |
| |
| void RenderDoc::startFrame() {} |
| |
| void RenderDoc::endFrame() {} |
| |
| #endif // defiend(ANGLE_PLATFORM_ANDROID) || defined(ANGLE_PLATFORM_LINUX) || |
| // defined(ANGLE_PLATFORM_WINDOWS) |