Trace Interpreter: Support Manhattan trace.

Adds the following fixes and features:

- support transform feedback varying strings
- support infinity and NaN constants
- support for sampler and query resources

Bug: angleproject:7887
Change-Id: Ib01afe66e4fda9bc77d0cb5eed52fa83a694a7d6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4126885
Reviewed-by: Cody Northrop <cnorthrop@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
This commit is contained in:
Jamie Madill
2023-01-03 10:27:03 -05:00
committed by Angle LUCI CQ
parent f7b5d5d1e0
commit 2c582dcb7b
10 changed files with 1128 additions and 1112 deletions

View File

@@ -1603,7 +1603,7 @@
"args": [
"--log=debug",
"interpret",
"among_us:trex_200",
"among_us:manhattan_10:trex_200",
"-L=2",
"--show-test-stdout"
],
@@ -2413,7 +2413,7 @@
"args": [
"--log=debug",
"interpret",
"among_us:trex_200",
"among_us:manhattan_10:trex_200",
"-L=2",
"--show-test-stdout"
],
@@ -4397,7 +4397,7 @@
"args": [
"--log=debug",
"interpret",
"among_us:trex_200",
"among_us:manhattan_10:trex_200",
"-L=2",
"--show-test-stdout"
],
@@ -5281,7 +5281,7 @@
"args": [
"--log=debug",
"interpret",
"among_us:trex_200",
"among_us:manhattan_10:trex_200",
"-L=2",
"--show-test-stdout"
],

View File

@@ -759,7 +759,7 @@
'args': [
'--log=debug',
'interpret',
'among_us:trex_200',
'among_us:manhattan_10:trex_200',
'-L=2',
'--show-test-stdout',
],

View File

@@ -1,6 +1,6 @@
{
"infra/specs/angle.json":
"729f4ae6669455e203dc118f586527e5",
"40ceba904a16f0d182788f0d224860a0",
"infra/specs/generate_test_spec_json.py":
"55db0ebf31449241041560f53752d3fb",
"infra/specs/mixins.pyl":
@@ -8,7 +8,7 @@
"infra/specs/test_suite_exceptions.pyl":
"47f7e288f077652df8ecd85dc671c32b",
"infra/specs/test_suites.pyl":
"c2ee50fddde24a65084199b14c2f1081",
"69169f28bf6473edeadd1cb6aaea56b0",
"infra/specs/variants.pyl":
"8cfcaa99fa07ad2a2d5d14f220fd5037",
"infra/specs/waterfalls.pyl":

View File

@@ -2,7 +2,7 @@
"scripts/egl_angle_ext.xml":
"9fbe802e21374f4c0bff6f7a68bb928c",
"scripts/gen_interpreter_utils.py":
"c8bc4867ffceeacbf56677db88dbf41f",
"10ba16ee78604763fc883525dd275de8",
"scripts/gl_angle_ext.xml":
"e42890bf014f4d4b7ebc07112bbb9764",
"scripts/registry_xml.py":
@@ -18,7 +18,7 @@
"third_party/OpenGL-Registry/src/xml/wgl.xml":
"eae784bf4d1b983a42af5671b140b7c4",
"util/capture/trace_fixture.h":
"19d490ad7256dd6dc3148eb75683b242",
"d1be0f16cc678d532e2c296beb403ae7",
"util/capture/trace_interpreter_autogen.cpp":
"02721169ed2c3adf162324b6879cb44d"
"a1b01a2f5f6fc8ae78eb380f622f0fef"
}

View File

@@ -36,7 +36,7 @@ CPP_TEMPLATE = """\
namespace angle
{{
CallCapture ParseCallCapture(const Token &nameToken, size_t numParamTokens, const Token *paramTokens, const TraceShaderMap &shaders)
CallCapture ParseCallCapture(const Token &nameToken, size_t numParamTokens, const Token *paramTokens, const TraceStringMap &strings)
{{
{parse_cases}
if (numParamTokens > 0)
@@ -78,7 +78,7 @@ void ReplayCustomFunctionCall(const CallCapture &call, const TraceFunctionMap &c
PARSE_CASE = """\
if (strcmp(nameToken, "{ep}") == 0)
{{
ParamBuffer params = ParseParameters<{pfn}>(paramTokens, shaders);
ParamBuffer params = ParseParameters<{pfn}>(paramTokens, strings);
return CallCapture({call}, std::move(params));
}}
"""

View File

@@ -467,11 +467,11 @@ void WriteGLFloatValue(std::ostream &out, GLfloat value)
{
out << "-";
}
out << "std::numeric_limits<float>::infinity()";
out << "INFINITY";
}
else if (std::isnan(value))
{
out << "std::numeric_limits<float>::quiet_NaN()";
out << "NAN";
}
else
{

View File

@@ -12,6 +12,7 @@
#include <EGL/egl.h>
#include <EGL/eglext.h>
#include <math.h>
#include <stddef.h>
#include <stdint.h>

View File

@@ -37,7 +37,7 @@ class Parser : angle::NonCopyable
: mStream(stream), mIndex(0), mVerboseLogging(verboseLogging)
{}
void getFunctionsAndShaders(TraceFunctionMap &functionsOut, TraceShaderMap &shadersOut)
void getFunctionsAndStrings(TraceFunctionMap &functionsOut, TraceStringMap &stringsOut)
{
parse();
for (auto &iter : mFunctions)
@@ -47,13 +47,13 @@ class Parser : angle::NonCopyable
functionsOut.emplace(std::move(name), std::move(func));
}
mFunctions.clear();
for (auto &iter : mShaders)
for (auto &iter : mStrings)
{
std::string name = iter.first;
TraceShader &shader = iter.second;
shadersOut.emplace(std::move(name), std::move(shader));
std::string name = iter.first;
TraceString &traceStr = iter.second;
stringsOut.emplace(std::move(name), std::move(traceStr));
}
mShaders.clear();
mStrings.clear();
}
private:
@@ -99,7 +99,7 @@ class Parser : angle::NonCopyable
}
// In our simplified trace C, every line that begins with a } either ends a function or a
// shader. All lines inside the function begin with whitespace. So to find the end of the
// string. All lines inside the function begin with whitespace. So to find the end of the
// function we just need to scan for a line beginning with }.
void skipFunction()
{
@@ -123,8 +123,13 @@ class Parser : angle::NonCopyable
{
*stringOut += '\n';
}
else if (peek() == '\"')
{
*stringOut += '\"';
}
else
{
printf("Unrecognized escape character: \\%c\n", peek());
UNREACHABLE();
}
}
@@ -237,8 +242,8 @@ class Parser : angle::NonCopyable
// printf(")\n");
//}
// We pass in the shaders for specific use with C string array parameters.
CallCapture call = ParseCallCapture(nameToken, numParams, paramTokens, mShaders);
// We pass in the strings for specific use with C string array parameters.
CallCapture call = ParseCallCapture(nameToken, numParams, paramTokens, mStrings);
func.push_back(std::move(call));
skipLine();
}
@@ -247,43 +252,43 @@ class Parser : angle::NonCopyable
addFunction(funcName, func);
}
void readShader()
void readMultilineString()
{
std::string name;
TraceShader shader;
TraceString traceStr;
while (peek() != 'g')
{
advance();
}
ASSERT(check("glShaderSource"));
ASSERT(check("glShaderSource") || check("glTransformFeedbackVaryings"));
readStringAppend(&name, '[');
if (mVerboseLogging)
{
printf("shader: %s\n", name.c_str());
printf("string: %s\n", name.c_str());
}
skipLine();
std::string source;
std::string str;
while (peek() != '}')
{
advance();
readStringAppend(&source, '\"');
readStringAppend(&str, '\"');
advance();
if (peek() == ',')
{
shader.sources.push_back(std::move(source));
traceStr.strings.push_back(std::move(str));
}
skipLine();
}
skipLine();
for (const std::string &src : shader.sources)
for (const std::string &cppstr : traceStr.strings)
{
shader.pointers.push_back(src.c_str());
traceStr.pointers.push_back(cppstr.c_str());
}
mShaders[name] = std::move(shader);
mStrings[name] = std::move(traceStr);
}
void addFunction(const std::string &funcName, TraceFunction &func)
@@ -312,7 +317,7 @@ class Parser : angle::NonCopyable
}
else
{
readShader();
readMultilineString();
}
}
}
@@ -320,7 +325,7 @@ class Parser : angle::NonCopyable
const std::string &mStream;
size_t mIndex;
TraceFunctionMap mFunctions;
TraceShaderMap mShaders;
TraceStringMap mStrings;
bool mVerboseLogging = false;
};
@@ -370,6 +375,16 @@ void PackResourceID(ParamBuffer &params, const Token &token)
gl::VertexArrayID id = {value};
params.addUnnamedParam(ParamType::TVertexArrayID, id);
}
else if (BeginsWith(token, "gQueryMap"))
{
gl::QueryID id = {value};
params.addUnnamedParam(ParamType::TQueryID, id);
}
else if (BeginsWith(token, "gSamplerMap"))
{
gl::SamplerID id = {value};
params.addUnnamedParam(ParamType::TSamplerID, id);
}
else
{
printf("Unknown resource map: %s\n", token);
@@ -521,7 +536,7 @@ void TraceInterpreter::setupReplay()
}
Parser parser(fileData, mVerboseLogging);
parser.getFunctionsAndShaders(mTraceFunctions, mTraceShaders);
parser.getFunctionsAndStrings(mTraceFunctions, mTraceStrings);
}
if (mTraceFunctions.count("SetupReplay") == 0)
@@ -565,7 +580,7 @@ void TraceInterpreter::runTraceFunction(const char *name) const
}
template <>
void PackParameter<uint32_t>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders)
void PackParameter<uint32_t>(ParamBuffer &params, const Token &token, const TraceStringMap &strings)
{
if (token[0] == 'g')
{
@@ -578,7 +593,7 @@ void PackParameter<uint32_t>(ParamBuffer &params, const Token &token, const Trac
}
template <>
void PackParameter<int32_t>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders)
void PackParameter<int32_t>(ParamBuffer &params, const Token &token, const TraceStringMap &strings)
{
if (BeginsWith(token, "gUniformLocations"))
{
@@ -595,7 +610,7 @@ void PackParameter<int32_t>(ParamBuffer &params, const Token &token, const Trace
}
template <>
void PackParameter<void *>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders)
void PackParameter<void *>(ParamBuffer &params, const Token &token, const TraceStringMap &strings)
{
void *value = 0;
params.addUnnamedParam(ParamType::TvoidPointer, value);
@@ -604,13 +619,13 @@ void PackParameter<void *>(ParamBuffer &params, const Token &token, const TraceS
template <>
void PackParameter<const int32_t *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
PackConstPointerParameter<int32_t>(params, ParamType::TGLintConstPointer, token);
}
template <>
void PackParameter<void **>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders)
void PackParameter<void **>(ParamBuffer &params, const Token &token, const TraceStringMap &strings)
{
UNREACHABLE();
}
@@ -618,20 +633,20 @@ void PackParameter<void **>(ParamBuffer &params, const Token &token, const Trace
template <>
void PackParameter<int32_t *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
UNREACHABLE();
}
template <>
void PackParameter<uint64_t>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders)
void PackParameter<uint64_t>(ParamBuffer &params, const Token &token, const TraceStringMap &strings)
{
params.addUnnamedParam(ParamType::TGLuint64,
static_cast<GLuint64>(std::strtoull(token, nullptr, 10)));
}
template <>
void PackParameter<int64_t>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders)
void PackParameter<int64_t>(ParamBuffer &params, const Token &token, const TraceStringMap &strings)
{
params.addUnnamedParam(ParamType::TGLint64,
static_cast<GLint64>(std::strtoll(token, nullptr, 10)));
@@ -640,7 +655,7 @@ void PackParameter<int64_t>(ParamBuffer &params, const Token &token, const Trace
template <>
void PackParameter<const int64_t *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
UNREACHABLE();
}
@@ -648,7 +663,7 @@ void PackParameter<const int64_t *>(ParamBuffer &params,
template <>
void PackParameter<int64_t *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
UNREACHABLE();
}
@@ -656,7 +671,7 @@ void PackParameter<int64_t *>(ParamBuffer &params,
template <>
void PackParameter<uint64_t *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
UNREACHABLE();
}
@@ -664,7 +679,7 @@ void PackParameter<uint64_t *>(ParamBuffer &params,
template <>
void PackParameter<const char *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
if (token[0] == '"')
{
@@ -686,7 +701,7 @@ void PackParameter<const char *>(ParamBuffer &params,
template <>
void PackParameter<const void *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
PackConstPointerParameter<void>(params, ParamType::TvoidConstPointer, token);
}
@@ -694,7 +709,7 @@ void PackParameter<const void *>(ParamBuffer &params,
template <>
void PackParameter<uint32_t *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
PackMutablePointerParameter<uint32_t>(params, ParamType::TGLuintPointer, token);
}
@@ -702,25 +717,25 @@ void PackParameter<uint32_t *>(ParamBuffer &params,
template <>
void PackParameter<const uint32_t *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
PackConstPointerParameter<uint32_t>(params, ParamType::TGLuintConstPointer, token);
}
template <>
void PackParameter<float>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders)
void PackParameter<float>(ParamBuffer &params, const Token &token, const TraceStringMap &strings)
{
params.addUnnamedParam(ParamType::TGLfloat, std::stof(token));
}
template <>
void PackParameter<uint8_t>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders)
void PackParameter<uint8_t>(ParamBuffer &params, const Token &token, const TraceStringMap &strings)
{
PackIntParameter<uint8_t>(params, ParamType::TGLubyte, token);
}
template <>
void PackParameter<float *>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders)
void PackParameter<float *>(ParamBuffer &params, const Token &token, const TraceStringMap &strings)
{
UNREACHABLE();
}
@@ -728,13 +743,13 @@ void PackParameter<float *>(ParamBuffer &params, const Token &token, const Trace
template <>
void PackParameter<const float *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
PackConstPointerParameter<float>(params, ParamType::TGLfloatConstPointer, token);
}
template <>
void PackParameter<GLsync>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders)
void PackParameter<GLsync>(ParamBuffer &params, const Token &token, const TraceStringMap &strings)
{
PackResourceID(params, token);
}
@@ -742,19 +757,19 @@ void PackParameter<GLsync>(ParamBuffer &params, const Token &token, const TraceS
template <>
void PackParameter<const char *const *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
// Find the shader that corresponds to "token". Currently we only support shader string arrays.
auto iter = shaders.find(token);
ASSERT(iter != shaders.end());
const TraceShader &shader = iter->second;
params.addUnnamedParam(ParamType::TGLcharConstPointerPointer, shader.pointers.data());
// Find the string that corresponds to "token". Currently we only support string arrays.
auto iter = strings.find(token);
ASSERT(iter != strings.end());
const TraceString &traceStr = iter->second;
params.addUnnamedParam(ParamType::TGLcharConstPointerPointer, traceStr.pointers.data());
}
template <>
void PackParameter<const char **>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
UNREACHABLE();
}
@@ -762,7 +777,7 @@ void PackParameter<const char **>(ParamBuffer &params,
template <>
void PackParameter<GLDEBUGPROCKHR>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
UNREACHABLE();
}
@@ -770,7 +785,7 @@ void PackParameter<GLDEBUGPROCKHR>(ParamBuffer &params,
template <>
void PackParameter<EGLDEBUGPROCKHR>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
UNREACHABLE();
}
@@ -778,7 +793,7 @@ void PackParameter<EGLDEBUGPROCKHR>(ParamBuffer &params,
template <>
void PackParameter<const struct AHardwareBuffer *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
UNREACHABLE();
}
@@ -786,7 +801,7 @@ void PackParameter<const struct AHardwareBuffer *>(ParamBuffer &params,
template <>
void PackParameter<EGLSetBlobFuncANDROID>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
UNREACHABLE();
}
@@ -794,13 +809,13 @@ void PackParameter<EGLSetBlobFuncANDROID>(ParamBuffer &params,
template <>
void PackParameter<EGLGetBlobFuncANDROID>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
UNREACHABLE();
}
template <>
void PackParameter<int16_t>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders)
void PackParameter<int16_t>(ParamBuffer &params, const Token &token, const TraceStringMap &strings)
{
PackIntParameter<int16_t>(params, ParamType::TGLshort, token);
}
@@ -808,13 +823,13 @@ void PackParameter<int16_t>(ParamBuffer &params, const Token &token, const Trace
template <>
void PackParameter<const int16_t *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
PackConstPointerParameter<int16_t>(params, ParamType::TGLshortConstPointer, token);
}
template <>
void PackParameter<char *>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders)
void PackParameter<char *>(ParamBuffer &params, const Token &token, const TraceStringMap &strings)
{
UNREACHABLE();
}
@@ -822,7 +837,7 @@ void PackParameter<char *>(ParamBuffer &params, const Token &token, const TraceS
template <>
void PackParameter<unsigned char *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
UNREACHABLE();
}
@@ -830,7 +845,7 @@ void PackParameter<unsigned char *>(ParamBuffer &params,
template <>
void PackParameter<const void *const *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
UNREACHABLE();
}
@@ -838,7 +853,7 @@ void PackParameter<const void *const *>(ParamBuffer &params,
template <>
void PackParameter<const uint64_t *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
UNREACHABLE();
}
@@ -847,7 +862,7 @@ void PackParameter<const uint64_t *>(ParamBuffer &params,
template <>
void PackParameter<EGLNativeDisplayType>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
UNREACHABLE();
}
@@ -857,7 +872,7 @@ void PackParameter<EGLNativeDisplayType>(ParamBuffer &params,
template <>
void PackParameter<EGLNativeWindowType>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
UNREACHABLE();
}
@@ -865,7 +880,7 @@ void PackParameter<EGLNativeWindowType>(ParamBuffer &params,
template <>
void PackParameter<EGLNativePixmapType>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
UNREACHABLE();
}
@@ -875,19 +890,19 @@ void PackParameter<EGLNativePixmapType>(ParamBuffer &params,
template <>
void PackParameter<const long *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
PackConstPointerParameter<int64_t>(params, ParamType::TGLuint64ConstPointer, token);
}
template <>
void PackParameter<long *>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders)
void PackParameter<long *>(ParamBuffer &params, const Token &token, const TraceStringMap &strings)
{
PackMutablePointerParameter<int64_t>(params, ParamType::TGLint64Pointer, token);
}
template <>
void PackParameter<long>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders)
void PackParameter<long>(ParamBuffer &params, const Token &token, const TraceStringMap &strings)
{
PackIntParameter<int64_t>(params, ParamType::TGLint64, token);
}
@@ -895,7 +910,7 @@ void PackParameter<long>(ParamBuffer &params, const Token &token, const TraceSha
template <>
void PackParameter<unsigned long>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders)
const TraceStringMap &strings)
{
PackIntParameter<uint64_t>(params, ParamType::TGLuint64, token);
}

View File

@@ -15,12 +15,12 @@
namespace angle
{
struct TraceShader
struct TraceString
{
std::vector<std::string> sources;
std::vector<std::string> strings;
std::vector<const char *> pointers;
};
using TraceShaderMap = std::map<std::string, TraceShader>;
using TraceStringMap = std::map<std::string, TraceString>;
class TraceInterpreter : public TraceReplayInterface
{
@@ -45,7 +45,7 @@ class TraceInterpreter : public TraceReplayInterface
const TraceInfo &mTraceInfo;
const char *mTestDataDir;
TraceFunctionMap mTraceFunctions;
TraceShaderMap mTraceShaders;
TraceStringMap mTraceStrings;
bool mVerboseLogging;
};
@@ -56,174 +56,174 @@ using Token = char[kMaxTokenSize];
CallCapture ParseCallCapture(const Token &nameToken,
size_t numParamTokens,
const Token *paramTokens,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <typename T>
void PackParameter(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders);
void PackParameter(ParamBuffer &params, const Token &token, const TraceStringMap &strings);
template <>
void PackParameter<uint32_t>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<int32_t>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders);
void PackParameter<int32_t>(ParamBuffer &params, const Token &token, const TraceStringMap &strings);
template <>
void PackParameter<void *>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders);
void PackParameter<void *>(ParamBuffer &params, const Token &token, const TraceStringMap &strings);
template <>
void PackParameter<const int32_t *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<void **>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders);
void PackParameter<void **>(ParamBuffer &params, const Token &token, const TraceStringMap &strings);
template <>
void PackParameter<int32_t *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<uint64_t>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<int64_t>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders);
void PackParameter<int64_t>(ParamBuffer &params, const Token &token, const TraceStringMap &strings);
template <>
void PackParameter<const int64_t *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<int64_t *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<uint64_t *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<const char *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<const void *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<uint32_t *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<const uint32_t *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<float>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders);
void PackParameter<float>(ParamBuffer &params, const Token &token, const TraceStringMap &strings);
template <>
void PackParameter<uint8_t>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders);
void PackParameter<uint8_t>(ParamBuffer &params, const Token &token, const TraceStringMap &strings);
template <>
void PackParameter<float *>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders);
void PackParameter<float *>(ParamBuffer &params, const Token &token, const TraceStringMap &strings);
template <>
void PackParameter<const float *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<GLsync>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders);
void PackParameter<GLsync>(ParamBuffer &params, const Token &token, const TraceStringMap &strings);
template <>
void PackParameter<const char *const *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<const char **>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<GLDEBUGPROCKHR>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<EGLDEBUGPROCKHR>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<const struct AHardwareBuffer *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<EGLSetBlobFuncANDROID>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<EGLGetBlobFuncANDROID>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<int16_t>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders);
void PackParameter<int16_t>(ParamBuffer &params, const Token &token, const TraceStringMap &strings);
template <>
void PackParameter<const int16_t *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<char *>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders);
void PackParameter<char *>(ParamBuffer &params, const Token &token, const TraceStringMap &strings);
template <>
void PackParameter<unsigned char *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<const void *const *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<const uint64_t *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
#if defined(ANGLE_PLATFORM_WINDOWS)
template <>
void PackParameter<EGLNativeDisplayType>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
#endif // defined(ANGLE_PLATFORM_WINDOWS)
#if defined(ANGLE_PLATFORM_WINDOWS) || defined(ANGLE_PLATFORM_ANDROID)
template <>
void PackParameter<EGLNativeWindowType>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<EGLNativePixmapType>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
#endif // defined(ANGLE_PLATFORM_WINDOWS) || defined(ANGLE_PLATFORM_ANDROID)
// On Apple platforms, std::is_same<uint64_t, long> is false despite being both 8 bits.
@@ -231,21 +231,21 @@ void PackParameter<EGLNativePixmapType>(ParamBuffer &params,
template <>
void PackParameter<const long *>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
template <>
void PackParameter<long *>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders);
void PackParameter<long *>(ParamBuffer &params, const Token &token, const TraceStringMap &strings);
template <>
void PackParameter<long>(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders);
void PackParameter<long>(ParamBuffer &params, const Token &token, const TraceStringMap &strings);
template <>
void PackParameter<unsigned long>(ParamBuffer &params,
const Token &token,
const TraceShaderMap &shaders);
const TraceStringMap &strings);
#endif // defined(ANGLE_PLATFORM_APPLE) || !defined(ANGLE_IS_64_BIT_CPU)
template <typename T>
void PackParameter(ParamBuffer &params, const Token &token, const TraceShaderMap &shaders)
void PackParameter(ParamBuffer &params, const Token &token, const TraceStringMap &strings)
{
static_assert(AssertFalse<T>::value, "No specialization for type.");
}
@@ -256,35 +256,35 @@ struct ParameterPacker;
template <typename Ret>
struct ParameterPacker<Ret()>
{
static void Pack(ParamBuffer &params, const Token *tokens, const TraceShaderMap &shaders) {}
static void Pack(ParamBuffer &params, const Token *tokens, const TraceStringMap &strings) {}
};
template <typename Ret, typename Arg>
struct ParameterPacker<Ret(Arg)>
{
static void Pack(ParamBuffer &params, const Token *tokens, const TraceShaderMap &shaders)
static void Pack(ParamBuffer &params, const Token *tokens, const TraceStringMap &strings)
{
PackParameter<Arg>(params, tokens[0], shaders);
PackParameter<Arg>(params, tokens[0], strings);
}
};
template <typename Ret, typename Arg, typename... Args>
struct ParameterPacker<Ret(Arg, Args...)>
{
static void Pack(ParamBuffer &params, const Token *tokens, const TraceShaderMap &shaders)
static void Pack(ParamBuffer &params, const Token *tokens, const TraceStringMap &strings)
{
PackParameter<Arg>(params, tokens[0], shaders);
ParameterPacker<Ret(Args...)>::Pack(params, &tokens[1], shaders);
PackParameter<Arg>(params, tokens[0], strings);
ParameterPacker<Ret(Args...)>::Pack(params, &tokens[1], strings);
}
};
template <typename Ret, typename Arg, typename... Args>
struct ParameterPacker<Ret (*)(Arg, Args...)>
{
static void Pack(ParamBuffer &params, const Token *tokens, const TraceShaderMap &shaders)
static void Pack(ParamBuffer &params, const Token *tokens, const TraceStringMap &strings)
{
PackParameter<Arg>(params, tokens[0], shaders);
ParameterPacker<Ret(Args...)>::Pack(params, &tokens[1], shaders);
PackParameter<Arg>(params, tokens[0], strings);
ParameterPacker<Ret(Args...)>::Pack(params, &tokens[1], strings);
}
};
@@ -304,10 +304,10 @@ struct RemoveStdCall
};
template <typename Func>
ParamBuffer ParseParameters(const Token *paramTokens, const TraceShaderMap &shaders)
ParamBuffer ParseParameters(const Token *paramTokens, const TraceStringMap &strings)
{
ParamBuffer params;
ParameterPacker<typename RemoveStdCall<Func>::Type>::Pack(params, paramTokens, shaders);
ParameterPacker<typename RemoveStdCall<Func>::Type>::Pack(params, paramTokens, strings);
return params;
}
} // namespace angle

File diff suppressed because it is too large Load Diff