Commit 9faf0cdc by Jamie Madill Committed by Commit Bot

Capture/Replay: Use custom GL header.

This will let us override the util loader for all new traces. It will also be easier to maintain going forward if we have to change the header again. The end goal is to run the trace tests with a custom GL layer that can intercept certain API calls. Bug: angleproject:4845 Change-Id: I028a1afdadf638998805d7b9a2cc6717cf5f0148 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2308029 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCody Northrop <cnorthrop@google.com>
parent ab95a449
......@@ -992,7 +992,7 @@ void WriteCppReplayIndexFiles(bool compression,
header << "#pragma once\n";
header << "\n";
header << "#include \"util/util_gl.h\"\n";
header << "#include \"angle_trace_gl.h\"\n";
header << "\n";
header << "#include <cstdint>\n";
header << "#include <cstdio>\n";
......@@ -1043,12 +1043,6 @@ void WriteCppReplayIndexFiles(bool compression,
<< "StateData(uint32_t frameIndex);\n";
}
header << "\n";
header << "using FramebufferChangeCallback = void(*)(void *userData, GLenum target, GLuint "
"framebuffer);\n";
header << "void SetFramebufferChangeCallback(void *userData, FramebufferChangeCallback "
"callback);\n";
header << "void OnFramebufferChange(GLenum target, GLuint framebuffer);\n";
header << "\n";
for (uint32_t frameIndex = frameStart; frameIndex <= frameEnd; ++frameIndex)
{
header << "void " << FmtReplayFunction(contextId, frameIndex) << ";\n";
......@@ -1102,8 +1096,6 @@ void WriteCppReplayIndexFiles(bool compression,
source << "\n";
source << "DecompressCallback gDecompressCallback;\n";
source << "const char *gBinaryDataDir = \".\";\n";
source << "FramebufferChangeCallback gFramebufferChangeCallback;\n";
source << "void *gFramebufferChangeCallbackUserData;\n";
source << "} // namespace\n";
source << "\n";
source << "LocationsMap gUniformLocations;\n";
......@@ -1152,21 +1144,6 @@ void WriteCppReplayIndexFiles(bool compression,
header << "\n";
source << "\n";
source << "void SetFramebufferChangeCallback(void *userData, FramebufferChangeCallback "
"callback)\n";
source << "{\n";
source << " gFramebufferChangeCallbackUserData = userData;\n";
source << " gFramebufferChangeCallback = callback;\n";
source << "}\n";
source << "\n";
source << "void OnFramebufferChange(GLenum target, GLuint framebuffer)\n";
source << "{\n";
source << " if (gFramebufferChangeCallback)\n";
source << " gFramebufferChangeCallback(gFramebufferChangeCallbackUserData, target, "
"framebuffer);\n";
source << "}\n";
source << "\n";
source << "void ReplayContext" << static_cast<int>(contextId) << "Frame(uint32_t frameIndex)\n";
source << "{\n";
source << " switch (frameIndex)\n";
......@@ -1436,16 +1413,6 @@ void CaptureDeleteUniformLocations(gl::ShaderProgramID program, std::vector<Call
callsOut->emplace_back("DeleteUniformLocations", std::move(params));
}
void CaptureOnFramebufferChange(GLenum target,
gl::FramebufferID framebufferID,
std::vector<CallCapture> *callsOut)
{
ParamBuffer params;
params.addValueParam("target", ParamType::TGLenum, target);
params.addValueParam("framebuffer", ParamType::TFramebufferID, framebufferID);
callsOut->emplace_back("OnFramebufferChange", std::move(params));
}
void MaybeCaptureUpdateResourceIDs(std::vector<CallCapture> *callsOut)
{
const CallCapture &call = callsOut->back();
......@@ -3888,15 +3855,6 @@ void FrameCapture::maybeCapturePostCallUpdates(const gl::Context *context)
CaptureDeleteUniformLocations(param.value.ShaderProgramIDVal, &mFrameCalls);
break;
}
case gl::EntryPoint::BindFramebuffer:
{
const ParamCapture &target = lastCall.params.getParam("target", ParamType::TGLenum, 0);
const ParamCapture &framebuffer =
lastCall.params.getParam("framebufferPacked", ParamType::TFramebufferID, 1);
CaptureOnFramebufferChange(target.value.GLenumVal, framebuffer.value.FramebufferIDVal,
&mFrameCalls);
break;
}
default:
break;
}
......
......@@ -293,6 +293,7 @@ if (is_win || is_linux || is_android || is_mac || is_fuchsia) {
# Imports "angle_restricted_traces"
import("perf_tests/restricted_traces/restricted_traces_autogen.gni")
sources = [
"perf_tests/restricted_traces/angle_trace_gl.h",
"perf_tests/restricted_traces/restricted_traces_autogen.cpp",
"perf_tests/restricted_traces/restricted_traces_autogen.h",
]
......@@ -300,6 +301,8 @@ if (is_win || is_linux || is_android || is_mac || is_fuchsia) {
data = []
defines = [ "ANGLE_TRACE_IMPLEMENTATION" ]
include_dirs = [ "perf_tests/restricted_traces" ]
foreach(_test_info, angle_restricted_traces) {
_test_and_ctx = []
_test_and_ctx = string_split(_test_info)
......
......@@ -27,8 +27,6 @@ using namespace egl_platform;
namespace
{
void FramebufferChangeCallback(void *userData, GLenum target, GLuint framebuffer);
struct TracePerfParams final : public RenderTestParams
{
// Common default options
......@@ -67,7 +65,7 @@ class TracePerfTest : public ANGLERenderTest, public ::testing::WithParamInterfa
void destroyBenchmark() override;
void drawBenchmark() override;
void onFramebufferChange(GLenum target, GLuint framebuffer);
void onReplayFramebufferChange(GLenum target, GLuint framebuffer);
uint32_t mStartFrame;
uint32_t mEndFrame;
......@@ -286,8 +284,8 @@ double TracePerfTest::getHostTimeFromGLTime(GLint64 glTime)
return mTimeline[firstSampleIndex].hostTime + hostRange * t;
}
// Callback from the perf tests.
void TracePerfTest::onFramebufferChange(GLenum target, GLuint framebuffer)
// Triggered when the replay calls glBindFramebuffer.
void TracePerfTest::onReplayFramebufferChange(GLenum target, GLuint framebuffer)
{
if (!mIsTimestampQueryAvailable)
return;
......@@ -351,11 +349,6 @@ void TracePerfTest::saveScreenshot(const std::string &screenshotName)
glFinish();
}
ANGLE_MAYBE_UNUSED void FramebufferChangeCallback(void *userData, GLenum target, GLuint framebuffer)
{
reinterpret_cast<TracePerfTest *>(userData)->onFramebufferChange(target, framebuffer);
}
TEST_P(TracePerfTest, Run)
{
run();
......
//
// Copyright 2020 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.
//
// Sets up the GL bindings for the trace tests.
#ifndef ANGLE_TRACE_GL_H_
#define ANGLE_TRACE_GL_H_
// TODO(jmadill): Bind to trace GL loader. http://anglebug.com/4845
#include "util/util_gl.h"
#endif // ANGLE_TRACE_GL_H_
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment