Capture/Replay: Auto-generate EGL capture code.

Replaces the custom code in the EGL stubs. Skips a few "Get"
entry points because this CL doesn't implement pointer capture
like we do for all the GL entry points.

Includes a new state in the AttributeMap that indicates which
type of attribute values we used when initializing the map.

Bug: angleproject:4035
Change-Id: I272eac5e4068602ce710ef66c9a1dce5387943a5
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3949911
Reviewed-by: Yuxin Hu <yuxinhu@google.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Cody Northrop <cnorthrop@google.com>
This commit is contained in:
Jamie Madill 2022-10-12 09:27:16 -04:00 коммит произвёл Angle LUCI CQ
Родитель 7c4dc25328
Коммит 2265e37bf9
29 изменённых файлов: 3835 добавлений и 603 удалений

Просмотреть файл

@ -6,7 +6,7 @@
"scripts/entry_point_packed_gl_enums.json":
"44a89e71f42598b0596ef4c25b290dff",
"scripts/generate_entry_points.py":
"18dd48631e551dcadf8b687953d3c6cb",
"679167787fd12c1ec3cbac70957c08df",
"scripts/gl_angle_ext.xml":
"8dd9662655c39ce22fecdc2449594e54",
"scripts/registry_xml.py":
@ -35,52 +35,56 @@
"48567dca16fd881dfe6d61fee0e3106f",
"src/libANGLE/Context_gles_ext_autogen.h":
"0d065fb2339cc6b6e154d002502192c1",
"src/libANGLE/capture/capture_egl_autogen.cpp":
"96116af910de967f275d18f5a3dc2d42",
"src/libANGLE/capture/capture_egl_autogen.h":
"fae4b722da10aceb3cad63d067164940",
"src/libANGLE/capture/capture_gl_1_autogen.cpp":
"f9bf8c9d8af9c097031be92ea3e805b5",
"5dfd57aea4a672d42fb4fd4df332709c",
"src/libANGLE/capture/capture_gl_1_autogen.h":
"48ab591d9671ea49aa9ae977b6a0d2fb",
"src/libANGLE/capture/capture_gl_2_autogen.cpp":
"2fb35570619b2e7a2088e523d0017b15",
"8e4d812520a8f17c5ce1f006e7cacb09",
"src/libANGLE/capture/capture_gl_2_autogen.h":
"1e5b7623566fe1282567e3b31cddbee1",
"src/libANGLE/capture/capture_gl_3_autogen.cpp":
"257e0e9b36c2111165122799054b6277",
"423e570a7f2264ca30b5d936505e24d0",
"src/libANGLE/capture/capture_gl_3_autogen.h":
"32e061964a2bccfc27dc95eb1a69558e",
"src/libANGLE/capture/capture_gl_4_autogen.cpp":
"334403c06a9ae7b5a537ca762dfb32ff",
"9b160c5e3df64deb3d190d7c82d7dbd2",
"src/libANGLE/capture/capture_gl_4_autogen.h":
"985366fe10b1e96e557a84d26769a042",
"src/libANGLE/capture/capture_gles_1_0_autogen.cpp":
"79678697323312af94be6a41cce62cc4",
"9c920afc742fd77145172494faa42146",
"src/libANGLE/capture/capture_gles_1_0_autogen.h":
"141838b474dda3d9a6122e73d3621972",
"src/libANGLE/capture/capture_gles_2_0_autogen.cpp":
"80e9dd0750299f2ada17042bf0c337f9",
"44079a951893f3bd2424946f40b371d8",
"src/libANGLE/capture/capture_gles_2_0_autogen.h":
"73d813905e7e938cf11d1722f98de84b",
"src/libANGLE/capture/capture_gles_3_0_autogen.cpp":
"124063a757419fa0246948e141312768",
"2030b9d08eecf9ec0ee960bd2af25a76",
"src/libANGLE/capture/capture_gles_3_0_autogen.h":
"c5bff0201be9dc51fdb507a63dd9d8f8",
"src/libANGLE/capture/capture_gles_3_1_autogen.cpp":
"c94c8573246f3c281d3a4b68e8a3301a",
"071260877f00a8841751f3cd309069d3",
"src/libANGLE/capture/capture_gles_3_1_autogen.h":
"414b92fe8db95146d8af3c13830e3685",
"src/libANGLE/capture/capture_gles_3_2_autogen.cpp":
"1c8511a8acf5a58bded506939dad0fef",
"3cdbd40c4f971a7770076326bfce51c7",
"src/libANGLE/capture/capture_gles_3_2_autogen.h":
"74ed7366af3a46c0661397cfa29ec6fc",
"src/libANGLE/capture/capture_gles_ext_autogen.cpp":
"f332b5e5e0573f3f9f6887afb663a5c4",
"b9cae90fe442c5a5c081bfbcd3413a78",
"src/libANGLE/capture/capture_gles_ext_autogen.h":
"d9bb79d32a32b331dac93956065c0b66",
"src/libANGLE/capture/frame_capture_replay_autogen.cpp":
"f1c2b5949709f05f71aeddee6d00d701",
"src/libANGLE/capture/frame_capture_utils_autogen.cpp":
"c87dd3000aef4270b40b98deeb497144",
"c332b27634067cc044b78b3d0de700ce",
"src/libANGLE/capture/frame_capture_utils_autogen.h":
"5bcab4ec3a25b1894bd1715581a7b1d3",
"8e136ce01abc762b5cf1862256d14c83",
"src/libANGLE/validationCL_autogen.h":
"0022d0cdb6a9e2ef4a59b71164f62333",
"src/libANGLE/validationEGL_autogen.h":
@ -122,11 +126,11 @@
"src/libGLESv2/entry_points_cl_autogen.h":
"dde2f94c3004874a7da995dae69da811",
"src/libGLESv2/entry_points_egl_autogen.cpp":
"2ae6b7456e2e8a858bbaf06ab62246fa",
"3ec155b49e891165d7e0cdc4cdad5258",
"src/libGLESv2/entry_points_egl_autogen.h":
"3bc7a8df9deadd7cfd615d0cfad0c6a8",
"src/libGLESv2/entry_points_egl_ext_autogen.cpp":
"46e86754277c35b101784854532b2e5c",
"b02ab9c50a2740a284d044b4415e1383",
"src/libGLESv2/entry_points_egl_ext_autogen.h":
"132314c90c7f1a104d41f911316c169d",
"src/libGLESv2/entry_points_gl_1_autogen.cpp":

Просмотреть файл

@ -180,7 +180,7 @@ void GL_APIENTRY GL_{name}({params})
{{
context->{name_lower_no_suffix}({internal_params});
}}
ANGLE_CAPTURE_GL({name}, isCallValid, {capture_params});
ANGLE_CAPTURE_GL({name}, isCallValid, {gl_capture_params});
}}
else
{{
@ -208,7 +208,7 @@ TEMPLATE_GLES_ENTRY_POINT_WITH_RETURN = """\
{{
returnValue = GetDefaultReturnValue<angle::EntryPoint::GL{name}, {return_type}>();
}}
ANGLE_CAPTURE_GL({name}, isCallValid, {capture_params}, returnValue);
ANGLE_CAPTURE_GL({name}, isCallValid, {gl_capture_params}, returnValue);
}}
else
{{
@ -233,6 +233,7 @@ void EGLAPIENTRY EGL_{name}({params})
ANGLE_EGL_VALIDATE_VOID(thread, {name}, {labeled_object}, {internal_params});
{name}(thread{comma_if_needed}{internal_params});
ANGLE_CAPTURE_EGL({name}, true, {egl_capture_params});
}}
"""
@ -256,7 +257,9 @@ TEMPLATE_EGL_ENTRY_POINT_WITH_RETURN = """\
ANGLE_EGL_VALIDATE(thread, {name}, {labeled_object}, {return_type}{comma_if_needed}{internal_params});
return {name}(thread{comma_if_needed}{internal_params});
{return_type} returnValue = {name}(thread{comma_if_needed}{internal_params});
ANGLE_CAPTURE_EGL({name}, true, {egl_capture_params}, returnValue);
return returnValue;
}}
"""
@ -534,10 +537,10 @@ TEMPLATE_CAPTURE_HEADER = """\
#include "common/PackedEnums.h"
#include "libANGLE/capture/FrameCapture.h"
namespace gl
namespace {namespace}
{{
{prototypes}
}} // namespace gl
}} // namespace {namespace}
#endif // LIBANGLE_CAPTURE_{annotation_upper}_AUTOGEN_H_
"""
@ -562,13 +565,13 @@ TEMPLATE_CAPTURE_SOURCE = """\
using namespace angle;
namespace gl
namespace {namespace}
{{
{capture_methods}
}} // namespace gl
}} // namespace {namespace}
"""
TEMPLATE_CAPTURE_METHOD_WITH_RETURN_VALUE = """
TEMPLATE_CAPTURE_METHOD_WITH_RETURN_VALUE = """\
CallCapture Capture{short_name}({params_with_type}, {return_value_type_original} returnValue)
{{
ParamBuffer paramBuffer;
@ -579,18 +582,18 @@ CallCapture Capture{short_name}({params_with_type}, {return_value_type_original}
InitParamValue(ParamType::T{return_value_type_custom}, returnValue, &returnValueCapture.value);
paramBuffer.addReturnValue(std::move(returnValueCapture));
return CallCapture(angle::EntryPoint::GL{short_name}, std::move(paramBuffer));
return CallCapture(angle::EntryPoint::{api_upper}{short_name}, std::move(paramBuffer));
}}
"""
TEMPLATE_CAPTURE_METHOD_NO_RETURN_VALUE = """
TEMPLATE_CAPTURE_METHOD_NO_RETURN_VALUE = """\
CallCapture Capture{short_name}({params_with_type})
{{
ParamBuffer paramBuffer;
{parameter_captures}
return CallCapture(angle::EntryPoint::GL{short_name}, std::move(paramBuffer));
return CallCapture(angle::EntryPoint::{api_upper}{short_name}, std::move(paramBuffer));
}}
"""
@ -881,6 +884,7 @@ EGL_HEADER_INCLUDES = """\
EGL_SOURCE_INCLUDES = """\
#include "libGLESv2/entry_points_egl_autogen.h"
#include "libANGLE/capture/capture_egl_autogen.h"
#include "libANGLE/entry_points_utils.h"
#include "libANGLE/validationEGL_autogen.h"
#include "libGLESv2/egl_stubs_autogen.h"
@ -899,6 +903,7 @@ EGL_EXT_HEADER_INCLUDES = """\
EGL_EXT_SOURCE_INCLUDES = """\
#include "libGLESv2/entry_points_egl_ext_autogen.h"
#include "libANGLE/capture/capture_egl_autogen.h"
#include "libANGLE/entry_points_utils.h"
#include "libANGLE/validationEGL_autogen.h"
#include "libGLESv2/egl_ext_stubs_autogen.h"
@ -1262,6 +1267,8 @@ EGL_PACKED_TYPES = {
"EGLSyncKHR": "egl::Sync *",
}
CAPTURE_BLOCKLIST = ['eglGetProcAddress']
def is_aliasing_excepted(api, cmd_name):
return api == apis.GLES and cmd_name in ALIASING_EXCEPTIONS
@ -1578,8 +1585,10 @@ def format_entry_point_def(api, command_node, cmd_name, proto, params, cmd_packe
", ".join(pass_params),
"comma_if_needed":
", " if len(params) > 0 else "",
"capture_params":
"gl_capture_params":
", ".join(["context"] + internal_params),
"egl_capture_params":
", ".join(["thread"] + internal_params),
"validate_params":
", ".join(["context"] + [entry_point_name] + internal_params),
"format_params":
@ -1632,14 +1641,17 @@ def get_capture_param_type_name(param_type):
def format_capture_method(api, command, cmd_name, proto, params, all_param_types,
capture_pointer_funcs, cmd_packed_gl_enums, packed_param_types):
context_param_typed = 'egl::Thread *thread' if api == apis.EGL else 'const State &glState'
context_param_name = 'thread' if api == apis.EGL else 'glState'
packed_gl_enums = get_packed_enums(api, cmd_packed_gl_enums, cmd_name, packed_param_types,
params)
params_with_type = get_internal_params(api, cmd_name,
["const State &glState", "bool isCallValid"] + params,
[context_param_typed, "bool isCallValid"] + params,
cmd_packed_gl_enums, packed_param_types)
params_just_name = ", ".join(
["glState", "isCallValid"] +
[context_param_name, "isCallValid"] +
[just_the_name_packed(param, packed_gl_enums) for param in params])
parameter_captures = []
@ -1648,15 +1660,16 @@ def format_capture_method(api, command, cmd_name, proto, params, all_param_types
param_name = just_the_name_packed(param, packed_gl_enums)
param_type = just_the_type_packed(param, packed_gl_enums).strip()
# TODO(http://anglebug.com/4035: Add support for egl::AttributeMap.
if 'AttributeMap' in param_type:
# egl::AttributeMap is too complex for ParamCapture to handle it.
capture = 'paramBuffer.addParam(CaptureAttributeMap(%s));' % param_name
parameter_captures += [capture]
continue
pointer_count = param_type.count("*")
capture_param_type = get_capture_param_type_name(param_type)
if pointer_count > 0:
# With EGL capture, we don't currently support capturing specific pointer params.
if pointer_count > 0 and api != apis.EGL:
params = params_just_name
capture_name = "Capture%s_%s" % (strip_api_prefix(cmd_name), param_name)
capture = TEMPLATE_PARAMETER_CAPTURE_POINTER.format(
@ -1680,23 +1693,32 @@ def format_capture_method(api, command, cmd_name, proto, params, all_param_types
capture = TEMPLATE_PARAMETER_CAPTURE_VALUE.format(
name=param_name, type=capture_param_type)
all_param_types.add(capture_param_type)
parameter_captures += [capture]
# For specific methods we can't easily parse their types. Work around this by omitting
# parameter captures, but keeping the capture method as a mostly empty stub.
if cmd_name not in CAPTURE_BLOCKLIST:
all_param_types.add(capture_param_type)
parameter_captures += [capture]
return_type = proto[:-len(cmd_name)].strip()
capture_return_type = get_capture_param_type_name(return_type)
if capture_return_type != 'void':
if cmd_name in CAPTURE_BLOCKLIST:
params_with_type += ", %s returnValue" % capture_return_type
else:
all_param_types.add(capture_return_type)
format_args = {
"api_upper": "EGL" if api == apis.EGL else "GL",
"full_name": cmd_name,
"short_name": strip_api_prefix(cmd_name),
"params_with_type": params_with_type,
"params_just_name": params_just_name,
"parameter_captures": "\n ".join(parameter_captures),
"return_value_type_original": return_type,
"return_value_type_custom": get_capture_param_type_name(return_type)
"return_value_type_custom": capture_return_type,
}
if return_type == "void":
if return_type == "void" or cmd_name in CAPTURE_BLOCKLIST:
return TEMPLATE_CAPTURE_METHOD_NO_RETURN_VALUE.format(**format_args)
else:
return TEMPLATE_CAPTURE_METHOD_WITH_RETURN_VALUE.format(**format_args)
@ -1781,8 +1803,9 @@ def format_validation_proto(api, cmd_name, proto, params, cmd_packed_gl_enums, p
def format_capture_proto(api, cmd_name, proto, params, cmd_packed_gl_enums, packed_param_types):
context_param_typed = 'egl::Thread *thread' if api == apis.EGL else 'const State &glState'
internal_params = get_internal_params(api, cmd_name,
["const State &glState", "bool isCallValid"] + params,
[context_param_typed, "bool isCallValid"] + params,
cmd_packed_gl_enums, packed_param_types)
return_type = proto[:-len(cmd_name)].strip()
if return_type != "void":
@ -1827,6 +1850,7 @@ class ANGLEEntryPoints(registry_xml.EntryPoints):
self.validation_protos.append(
format_validation_proto(self.api, cmd_name, proto_text, param_text,
cmd_packed_enums, packed_param_types))
self.capture_protos.append(
format_capture_proto(self.api, cmd_name, proto_text, param_text, cmd_packed_enums,
packed_param_types))
@ -2103,15 +2127,19 @@ def write_gl_validation_header(annotation, comment, protos, source):
TEMPLATE_GL_VALIDATION_HEADER)
def write_capture_header(annotation, comment, protos, capture_pointer_funcs):
def write_capture_header(api, annotation, comment, protos, capture_pointer_funcs):
ns = 'egl' if api == apis.EGL else 'gl'
combined_protos = ["\n// Method Captures\n"] + protos
if capture_pointer_funcs:
combined_protos += ["\n// Parameter Captures\n"] + capture_pointer_funcs
content = TEMPLATE_CAPTURE_HEADER.format(
script_name=os.path.basename(sys.argv[0]),
data_source_name="gl.xml and gl_angle_ext.xml",
data_source_name="%s.xml and %s_angle_ext.xml" % (ns, ns),
annotation_lower=annotation.lower(),
annotation_upper=annotation.upper(),
comment=comment,
prototypes="\n".join(["\n// Method Captures\n"] + protos + ["\n// Parameter Captures\n"] +
capture_pointer_funcs))
namespace=ns,
prototypes="\n".join(combined_protos))
path = path_to(os.path.join("libANGLE", "capture"), "capture_%s_autogen.h" % annotation)
@ -2120,13 +2148,15 @@ def write_capture_header(annotation, comment, protos, capture_pointer_funcs):
out.close()
def write_capture_source(annotation_with_dash, annotation_no_dash, comment, capture_methods):
def write_capture_source(api, annotation_with_dash, annotation_no_dash, comment, capture_methods):
ns = 'egl' if api == apis.EGL else 'gl'
content = TEMPLATE_CAPTURE_SOURCE.format(
script_name=os.path.basename(sys.argv[0]),
data_source_name="gl.xml and gl_angle_ext.xml",
data_source_name="%s.xml and %s_angle_ext.xml" % (ns, ns),
annotation_with_dash=annotation_with_dash,
annotation_no_dash=annotation_no_dash,
comment=comment,
namespace=ns,
capture_methods="\n".join(capture_methods))
path = path_to(
@ -2138,7 +2168,8 @@ def write_capture_source(annotation_with_dash, annotation_no_dash, comment, capt
def is_packed_enum_param_type(param_type):
return param_type[0:2] != "GL" and "void" not in param_type
return not param_type.startswith("GL") and not param_type.startswith(
"EGL") and "void" not in param_type
def add_namespace(param_type):
@ -2198,16 +2229,14 @@ def is_id_pointer_type(t):
def get_gl_param_type_type(param_type):
if not is_packed_enum_param_type(param_type):
return get_gl_pointer_type(param_type)
else:
if is_packed_enum_param_type(param_type):
base_type = param_type.replace("Pointer", "").replace("Const", "")
if is_id_type(base_type):
replace_type = "GLuint"
else:
replace_type = "GLenum"
param_type = param_type.replace(base_type, replace_type)
return get_gl_pointer_type(param_type)
return get_gl_pointer_type(param_type)
def get_param_type_union_name(param_type):
@ -2672,6 +2701,8 @@ def main():
'../src/libANGLE/Context_gles_3_1_autogen.h',
'../src/libANGLE/Context_gles_3_2_autogen.h',
'../src/libANGLE/Context_gles_ext_autogen.h',
'../src/libANGLE/capture/capture_egl_autogen.cpp',
'../src/libANGLE/capture/capture_egl_autogen.h',
'../src/libANGLE/capture/capture_gl_1_autogen.cpp',
'../src/libANGLE/capture/capture_gl_1_autogen.h',
'../src/libANGLE/capture/capture_gl_2_autogen.cpp',
@ -2829,9 +2860,9 @@ def main():
write_gl_validation_header(validation_annotation, "ES %s" % comment, eps.validation_protos,
"gl.xml and gl_angle_ext.xml")
write_capture_header('gles_' + version, comment, eps.capture_protos,
write_capture_header(apis.GLES, 'gles_' + version, comment, eps.capture_protos,
eps.capture_pointer_funcs)
write_capture_source('gles_' + version, validation_annotation, comment,
write_capture_source(apis.GLES, 'gles_' + version, validation_annotation, comment,
eps.capture_methods)
# After we finish with the main entry points, we process the extensions.
@ -2970,9 +3001,10 @@ def main():
source_includes, "libGLESv2", "gl.xml")
# Capture files
write_capture_header(annotation.lower(), name, capture_protos, capture_pointer_funcs)
write_capture_source(annotation.lower(), 'GL' + str(major_version) + '_autogen', name,
capture_defs)
write_capture_header(apis.GL, annotation.lower(), name, capture_protos,
capture_pointer_funcs)
write_capture_source(apis.GL, annotation.lower(), 'GL' + str(major_version) + '_autogen',
name, capture_defs)
# Validation files
write_gl_validation_header("GL%s" % major_version, name, validation_protos, "gl.xml")
@ -3088,6 +3120,8 @@ def main():
libegl_ep_defs = []
libegl_windows_def_exports = []
egl_commands = []
egl_capture_protos = []
egl_capture_methods = []
for major_version, minor_version in registry_xml.EGL_VERSIONS:
version = "%d_%d" % (major_version, minor_version)
@ -3116,6 +3150,8 @@ def main():
libegl_ep_defs += [comment] + eps.export_defs
egl_validation_protos += [comment] + eps.validation_protos
libegl_windows_def_exports += [win_def_comment] + get_exports(eglxml.commands[version])
egl_capture_protos += eps.capture_protos
egl_capture_methods += eps.capture_methods
egl_decls.append("} // extern \"C\"")
egl_defs.append("} // extern \"C\"")
@ -3151,6 +3187,8 @@ def main():
libegl_ep_defs += [comment] + eps.export_defs
egl_validation_protos += [comment] + eps.validation_protos
libegl_windows_def_exports += [win_def_comment] + get_exports(ext_cmd_names)
egl_capture_protos += eps.capture_protos
egl_capture_methods += eps.capture_methods
# Avoid writing out entry points defined by a prior extension.
for dupe in eglxml.ext_dupes[extension_name]:
@ -3170,6 +3208,9 @@ def main():
EGL_EXT_STUBS_HEADER_PATH, eglxml.all_commands, egl_ext_commands,
EGLEntryPoints.get_packed_enums(), EGL_PACKED_TYPES)
write_capture_header(apis.EGL, 'egl', 'EGL', egl_capture_protos, [])
write_capture_source(apis.EGL, 'egl', 'EGL', 'all', egl_capture_methods)
wglxml = registry_xml.RegistryXML('wgl.xml')
name_prefix = "WGL_VERSION_"
@ -3200,8 +3241,9 @@ def main():
write_gl_validation_header("ESEXT", "ES extension", ext_validation_protos,
"gl.xml and gl_angle_ext.xml")
write_capture_header("gles_ext", "extension", ext_capture_protos, ext_capture_pointer_funcs)
write_capture_source("gles_ext", "ESEXT", "extension", ext_capture_methods)
write_capture_header(apis.GLES, "gles_ext", "extension", ext_capture_protos,
ext_capture_pointer_funcs)
write_capture_source(apis.GLES, "gles_ext", "ESEXT", "extension", ext_capture_methods)
write_context_api_decls(glesdecls, "gles")
write_context_api_decls(desktop_gl_decls, "gl")

Просмотреть файл

@ -129,6 +129,7 @@ AttributeMap AttributeMap::CreateFromIntArray(const EGLint *attributes)
{
AttributeMap map;
map.mIntPointer = attributes;
map.mMapType = AttributeMapType::Int;
return map;
}
@ -137,6 +138,7 @@ AttributeMap AttributeMap::CreateFromAttribArray(const EGLAttrib *attributes)
{
AttributeMap map;
map.mAttribPointer = attributes;
map.mMapType = AttributeMapType::Attrib;
return map;
}

Просмотреть файл

@ -24,6 +24,13 @@ struct ValidationContext;
using AttributeValidationFunc =
std::function<bool(const ValidationContext *, const Display *, EGLAttrib)>;
enum AttributeMapType
{
Invalid,
Attrib,
Int,
};
class AttributeMap final
{
public:
@ -76,6 +83,8 @@ class AttributeMap final
static AttributeMap CreateFromIntArray(const EGLint *attributes);
static AttributeMap CreateFromAttribArray(const EGLAttrib *attributes);
AttributeMapType getType() const { return mMapType; }
private:
bool isValidated() const;
@ -94,6 +103,7 @@ class AttributeMap final
mutable const EGLint *mIntPointer = nullptr;
mutable const EGLAttrib *mAttribPointer = nullptr;
mutable Map mValidatedAttributes;
mutable AttributeMapType mMapType = AttributeMapType::Invalid;
};
} // namespace egl

Просмотреть файл

@ -32,7 +32,7 @@
#include "libANGLE/Shader.h"
#include "libANGLE/Surface.h"
#include "libANGLE/VertexArray.h"
#include "libANGLE/capture/capture_egl.h"
#include "libANGLE/capture/capture_egl_autogen.h"
#include "libANGLE/capture/capture_gles_1_0_autogen.h"
#include "libANGLE/capture/capture_gles_2_0_autogen.h"
#include "libANGLE/capture/capture_gles_3_0_autogen.h"
@ -3843,11 +3843,11 @@ void CaptureShareGroupMidExecutionSetup(
// Create the image on demand
egl::Image *image = nullptr;
Capture(setupCalls,
CaptureEGLCreateImage(nullptr, context, EGL_GL_TEXTURE_2D_KHR,
reinterpret_cast<EGLClientBuffer>(
static_cast<GLuint64>(stagingTexId.value)),
retrievedAttribs, image));
Capture(setupCalls, egl::CaptureCreateImage(
nullptr, true, nullptr, context, EGL_GL_TEXTURE_2D_KHR,
reinterpret_cast<EGLClientBuffer>(
static_cast<GLuint64>(stagingTexId.value)),
retrievedAttribs, image));
// Pass the eglImage to the texture that is bound to GL_TEXTURE_EXTERNAL_OES
// target
@ -5077,6 +5077,22 @@ bool SkipCall(EntryPoint entryPoint)
// - Same as uniforms, the value can vary, asking above GL_ACTIVE_ATTRIBUTES is an error
return true;
case EntryPoint::EGLChooseConfig:
case EntryPoint::EGLGetProcAddress:
case EntryPoint::EGLGetConfigAttrib:
case EntryPoint::EGLGetConfigs:
case EntryPoint::EGLGetSyncAttrib:
case EntryPoint::EGLGetSyncAttribKHR:
case EntryPoint::EGLQuerySurface:
// Skip these calls because:
// - Some EGL types and pointer parameters aren't yet implemented in EGL capture.
return true;
case EntryPoint::EGLSwapBuffers:
// Skip these calls because:
// - Swap is handled specially by the trace harness.
return true;
default:
break;
}
@ -6235,6 +6251,22 @@ void FrameCaptureShared::maybeCaptureDrawElementsClientData(const gl::Context *c
captureClientArraySnapshot(context, indexRange.end + 1, instanceCount);
}
template <typename AttribT, typename FactoryT>
void CreateEGLImagePreCallUpdate(const CallCapture &call,
ResourceTracker &resourceTracker,
ParamType paramType,
FactoryT factory)
{
GLeglImageOES image = call.params.getReturnValue().value.voidPointerVal;
const ParamCapture &param = call.params.getParam("attrib_list", paramType, 4);
const AttribT *attribs =
param.data.empty() ? nullptr : reinterpret_cast<const AttribT *>(param.data[0].data());
egl::AttributeMap attributeMap = factory(attribs);
attributeMap.initializeWithoutValidation();
resourceTracker.getImageToAttribTable().insert(
std::pair<void *, egl::AttributeMap>(image, attributeMap));
}
void FrameCaptureShared::maybeCapturePreCallUpdates(
const gl::Context *context,
CallCapture &call,
@ -6781,15 +6813,16 @@ void FrameCaptureShared::maybeCapturePreCallUpdates(
}
case EntryPoint::EGLCreateImage:
{
CreateEGLImagePreCallUpdate<EGLAttrib>(call, mResourceTracker,
ParamType::TEGLAttribPointer,
egl::AttributeMap::CreateFromAttribArray);
break;
}
case EntryPoint::EGLCreateImageKHR:
{
GLeglImageOES image = call.params.getReturnValue().value.voidPointerVal;
const EGLAttrib *attribs = reinterpret_cast<const EGLAttrib *>(
call.params.getParam("attrib_list", ParamType::TGLint64Pointer, 4).data[0].data());
egl::AttributeMap attributeMap = egl::AttributeMap::CreateFromAttribArray(attribs);
attributeMap.initializeWithoutValidation();
mResourceTracker.getImageToAttribTable().insert(
std::pair<void *, egl::AttributeMap>(image, attributeMap));
CreateEGLImagePreCallUpdate<EGLint>(call, mResourceTracker, ParamType::TEGLintPointer,
egl::AttributeMap::CreateFromIntArray);
break;
}
@ -7977,9 +8010,8 @@ void FrameCaptureShared::writeMainContextCppReplay(const gl::Context *context,
out << proto << "\n";
out << "{\n";
out << " gContextMap[0] = EGL_NO_CONTEXT;\n";
out << " EGLContext context = eglGetCurrentContext();\n";
out << " gContextMap[" << context->id().value << "] = context;\n";
out << " gContextMap[" << reinterpret_cast<uintptr_t>(context) << "ul] = context;\n";
out << "\n";
// Setup all of the shared objects.
@ -8010,8 +8042,8 @@ void FrameCaptureShared::writeMainContextCppReplay(const gl::Context *context,
// beginning of the setup call stream.
out << " EGLContext context" << shareContext->id()
<< " = eglCreateContext(nullptr, nullptr, context, nullptr);\n";
out << " gContextMap[" << shareContext->id().value << "] = context"
<< shareContext->id() << ";\n";
out << " gContextMap[" << reinterpret_cast<uintptr_t>(shareContext)
<< "ul] = context" << shareContext->id() << ";\n";
// The SetupReplayContextXX() calls only exist if this is a mid-execution capture
// and we can only call them if they exist, so only output the calls if this is a
// MEC.
@ -8136,7 +8168,8 @@ void FrameCaptureShared::writeMainContextCppReplay(const gl::Context *context,
bodyStream << " // Switching contexts for non-shared Reset\n"
<< " eglMakeCurrent("
<< "EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE, "
<< "gContextMap[" << contextID.value << "]);\n\n";
<< "gContextMap[" << reinterpret_cast<uintptr_t>(context)
<< "ul]);\n\n";
}
// Then append the Reset calls
@ -8716,10 +8749,8 @@ void WriteParamValueReplay<ParamType::TEGLDEBUGPROCKHR>(std::ostream &os,
const CallCapture &call,
EGLDEBUGPROCKHR value)
{
// The value isn't actually useful, but this fixes MSVC compile errors:
// error: implicit conversion between pointer-to-function and pointer-to-object is a Microsoft
// extension [-Werror,-Wmicrosoft-cast]
os << reinterpret_cast<void *>(value);
// It's not necessary to implement correct capture for these types.
os << "0";
}
template <>
@ -8727,10 +8758,8 @@ void WriteParamValueReplay<ParamType::TEGLGetBlobFuncANDROID>(std::ostream &os,
const CallCapture &call,
EGLGetBlobFuncANDROID value)
{
// The value isn't actually useful, but this fixes MSVC compile errors:
// error: implicit conversion between pointer-to-function and pointer-to-object is a Microsoft
// extension [-Werror,-Wmicrosoft-cast]
os << reinterpret_cast<void *>(value);
// It's not necessary to implement correct capture for these types.
os << "0";
}
template <>
@ -8738,10 +8767,96 @@ void WriteParamValueReplay<ParamType::TEGLSetBlobFuncANDROID>(std::ostream &os,
const CallCapture &call,
EGLSetBlobFuncANDROID value)
{
// The value isn't actually useful, but this fixes MSVC compile errors:
// error: implicit conversion between pointer-to-function and pointer-to-object is a Microsoft
// extension [-Werror,-Wmicrosoft-cast]
os << reinterpret_cast<void *>(value);
// It's not necessary to implement correct capture for these types.
os << "0";
}
template <>
void WriteParamValueReplay<ParamType::Tegl_ConfigPointer>(std::ostream &os,
const CallCapture &call,
egl::Config *value)
{
os << "EGL_NO_CONFIG_KHR";
}
template <>
void WriteParamValueReplay<ParamType::Tegl_SurfacePointer>(std::ostream &os,
const CallCapture &call,
egl::Surface *value)
{
if (value == nullptr)
{
os << "EGL_NO_SURFACE";
}
else
{
os << "gSurfaceMap[" << reinterpret_cast<uintptr_t>(value) << "ul]";
}
}
template <>
void WriteParamValueReplay<ParamType::Tgl_ContextPointer>(std::ostream &os,
const CallCapture &call,
gl::Context *value)
{
if (value == nullptr)
{
os << "EGL_NO_CONTEXT";
}
else
{
os << "gContextMap[" << reinterpret_cast<uintptr_t>(value) << "ul]";
}
}
template <>
void WriteParamValueReplay<ParamType::Tegl_DisplayPointer>(std::ostream &os,
const CallCapture &call,
egl::Display *value)
{
os << "EGL_NO_DISPLAY";
}
template <>
void WriteParamValueReplay<ParamType::Tegl_ImagePointer>(std::ostream &os,
const CallCapture &call,
egl::Image *value)
{
uint64_t pointerValue = reinterpret_cast<uint64_t>(value);
os << "gEGLImageMap[" << pointerValue << "ul]";
}
template <>
void WriteParamValueReplay<ParamType::TEGLClientBuffer>(std::ostream &os,
const CallCapture &call,
EGLClientBuffer value)
{
const ParamCapture &targetParam = call.params.getParam("target", ParamType::TEGLenum, 2);
os << "GetClientBuffer(" << targetParam.value.EGLenumVal << ", " << value << ")";
}
template <>
void WriteParamValueReplay<ParamType::Tegl_SyncPointer>(std::ostream &os,
const CallCapture &call,
egl::Sync *value)
{
os << "EGL_NO_SYNC_KHR";
}
template <>
void WriteParamValueReplay<ParamType::TEGLTime>(std::ostream &os,
const CallCapture &call,
EGLTime value)
{
os << value << "ul";
}
template <>
void WriteParamValueReplay<ParamType::TEGLTimeKHR>(std::ostream &os,
const CallCapture &call,
EGLTimeKHR value)
{
os << value << "ul";
}
// ReplayWriter implementation.
@ -9031,3 +9146,62 @@ std::vector<std::string> ReplayWriter::getAndResetWrittenFiles()
return results;
}
} // namespace angle
namespace egl
{
angle::ParamCapture CaptureAttributeMap(const egl::AttributeMap &attribMap)
{
switch (attribMap.getType())
{
case AttributeMapType::Attrib:
{
angle::ParamCapture paramCapture("attrib_list", angle::ParamType::TEGLAttribPointer);
if (attribMap.isEmpty())
{
paramCapture.value.EGLAttribPointerVal = nullptr;
}
else
{
std::vector<EGLAttrib> attribs;
for (const auto &[key, value] : attribMap)
{
attribs.push_back(key);
attribs.push_back(value);
}
attribs.push_back(EGL_NONE);
angle::CaptureMemory(attribs.data(), attribs.size() * sizeof(EGLAttrib),
&paramCapture);
}
return paramCapture;
}
case AttributeMapType::Int:
{
angle::ParamCapture paramCapture("attrib_list", angle::ParamType::TEGLintPointer);
if (attribMap.isEmpty())
{
paramCapture.value.EGLintPointerVal = nullptr;
}
else
{
std::vector<EGLint> attribs;
for (const auto &[key, value] : attribMap)
{
attribs.push_back(static_cast<EGLint>(key));
attribs.push_back(static_cast<EGLint>(value));
}
attribs.push_back(EGL_NONE);
angle::CaptureMemory(attribs.data(), attribs.size() * sizeof(EGLint),
&paramCapture);
}
return paramCapture;
}
default:
UNREACHABLE();
return angle::ParamCapture();
}
}
} // namespace egl

Просмотреть файл

@ -13,6 +13,7 @@
#include "common/PackedEnums.h"
#include "common/system_utils.h"
#include "libANGLE/Context.h"
#include "libANGLE/Thread.h"
#include "libANGLE/angletypes.h"
#include "libANGLE/capture/frame_capture_utils_autogen.h"
#include "libANGLE/entry_points_utils.h"
@ -882,10 +883,10 @@ class FrameCaptureShared final : angle::NonCopyable
};
template <typename CaptureFuncT, typename... ArgsT>
void CaptureCallToFrameCapture(CaptureFuncT captureFunc,
bool isCallValid,
gl::Context *context,
ArgsT... captureParams)
void CaptureGLCallToFrameCapture(CaptureFuncT captureFunc,
bool isCallValid,
gl::Context *context,
ArgsT... captureParams)
{
FrameCaptureShared *frameCaptureShared = context->getShareGroup()->getFrameCaptureShared();
if (!frameCaptureShared->isCapturing())
@ -894,10 +895,32 @@ void CaptureCallToFrameCapture(CaptureFuncT captureFunc,
}
CallCapture call = captureFunc(context->getState(), isCallValid, captureParams...);
frameCaptureShared->captureCall(context, std::move(call), isCallValid);
}
template <typename CaptureFuncT, typename... ArgsT>
void CaptureEGLCallToFrameCapture(CaptureFuncT captureFunc,
bool isCallValid,
egl::Thread *thread,
ArgsT... captureParams)
{
gl::Context *context = thread->getContext();
if (!context)
{
return;
}
angle::FrameCaptureShared *frameCaptureShared =
context->getShareGroup()->getFrameCaptureShared();
if (!frameCaptureShared->isCapturing())
{
return;
}
angle::CallCapture call = captureFunc(thread, isCallValid, captureParams...);
frameCaptureShared->captureCall(context, std::move(call), true);
}
template <typename T>
void ParamBuffer::addValueParam(const char *paramName, ParamType paramType, T paramValue)
{
@ -1148,6 +1171,11 @@ void WriteParamValueReplay<ParamType::Tegl_DisplayPointer>(std::ostream &os,
const CallCapture &call,
egl::Display *value);
template <>
void WriteParamValueReplay<ParamType::Tegl_ImagePointer>(std::ostream &os,
const CallCapture &call,
egl::Image *value);
template <>
void WriteParamValueReplay<ParamType::Tegl_SurfacePointer>(std::ostream &os,
const CallCapture &call,
@ -1182,6 +1210,26 @@ void WriteParamValueReplay<ParamType::Tegl_SurfacePointer>(std::ostream &os,
const CallCapture &call,
egl::Surface *value);
template <>
void WriteParamValueReplay<ParamType::TEGLClientBuffer>(std::ostream &os,
const CallCapture &call,
EGLClientBuffer value);
template <>
void WriteParamValueReplay<ParamType::Tegl_SyncPointer>(std::ostream &os,
const CallCapture &call,
egl::Sync *value);
template <>
void WriteParamValueReplay<ParamType::TEGLTime>(std::ostream &os,
const CallCapture &call,
EGLTime value);
template <>
void WriteParamValueReplay<ParamType::TEGLTimeKHR>(std::ostream &os,
const CallCapture &call,
EGLTimeKHR value);
// General fallback for any unspecific type.
template <ParamType ParamT, typename T>
void WriteParamValueReplay(std::ostream &os, const CallCapture &call, T value)
@ -1205,4 +1253,9 @@ void CaptureTextureAndSamplerParameter_params(GLenum pname,
}
}
namespace egl
{
angle::ParamCapture CaptureAttributeMap(const egl::AttributeMap &attribMap);
} // namespace egl
#endif // LIBANGLE_FRAME_CAPTURE_H_

Просмотреть файл

@ -1,246 +0,0 @@
//
// Copyright 2022 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.
//
// capture_egl.h:
// EGL capture functions
//
#include "libANGLE/capture/capture_egl.h"
#include "libANGLE/Surface.h"
#include "libANGLE/capture/FrameCapture.h"
#include "libANGLE/capture/frame_capture_utils.h"
#include "libANGLE/capture/gl_enum_utils_autogen.h"
#define USE_SYSTEM_ZLIB
#include "compression_utils_portable.h"
#if !ANGLE_CAPTURE_ENABLED
# error Frame capture must be enabled to include this file.
#endif // !ANGLE_CAPTURE_ENABLED
namespace angle
{
template <>
void WriteParamValueReplay<ParamType::Tgl_ContextPointer>(std::ostream &os,
const CallCapture &call,
gl::Context *context)
{
if (context == nullptr)
{
os << "EGL_NO_CONTEXT";
}
else
{
os << "gContextMap[" << context->id().value << "]";
}
}
template <>
void WriteParamValueReplay<ParamType::Tegl_DisplayPointer>(std::ostream &os,
const CallCapture &call,
egl::Display *display)
{
os << "EGL_NO_DISPLAY";
}
template <>
void WriteParamValueReplay<ParamType::Tegl_ConfigPointer>(std::ostream &os,
const CallCapture &call,
egl::Config *config)
{
os << "EGL_NO_CONFIG_KHR";
}
template <>
void WriteParamValueReplay<ParamType::Tegl_SurfacePointer>(std::ostream &os,
const CallCapture &call,
egl::Surface *surface)
{
if (surface == nullptr)
{
os << "EGL_NO_SURFACE";
}
else
{
os << "gSurfaceMap[" << reinterpret_cast<uintptr_t>(surface) << "]";
}
}
template <>
void WriteParamValueReplay<ParamType::TEGLClientBuffer>(std::ostream &os,
const CallCapture &call,
EGLClientBuffer value)
{
const auto &targetParam = call.params.getParam("target", ParamType::TEGLenum, 2);
os << "GetClientBuffer(" << targetParam.value.EGLenumVal << ", " << value << ")";
}
} // namespace angle
namespace egl
{
static angle::ParamCapture CaptureAttributeMap(const egl::AttributeMap &attribMap)
{
std::vector<EGLAttrib> attribs;
for (const auto &[key, value] : attribMap)
{
attribs.push_back(key);
attribs.push_back(value);
}
attribs.push_back(EGL_NONE);
angle::ParamCapture paramCapture("attrib_list", angle::ParamType::TGLint64Pointer);
angle::CaptureMemory(attribs.data(), attribs.size() * sizeof(EGLAttrib), &paramCapture);
return paramCapture;
}
static angle::ParamCapture CaptureAttributeMapInt(const egl::AttributeMap &attribMap)
{
std::vector<EGLint> attribs;
for (const auto &[key, value] : attribMap)
{
attribs.push_back(static_cast<EGLint>(key));
attribs.push_back(static_cast<EGLint>(value));
}
attribs.push_back(EGL_NONE);
angle::ParamCapture paramCapture("attrib_list", angle::ParamType::TGLintPointer);
angle::CaptureMemory(attribs.data(), attribs.size() * sizeof(EGLint), &paramCapture);
return paramCapture;
}
angle::CallCapture CaptureCreateNativeClientBufferANDROID(const egl::AttributeMap &attribMap,
EGLClientBuffer eglClientBuffer)
{
angle::ParamBuffer paramBuffer;
paramBuffer.addParam(CaptureAttributeMap(attribMap));
angle::ParamCapture retval;
angle::SetParamVal<angle::ParamType::TEGLClientBuffer, EGLClientBuffer>(eglClientBuffer,
&retval.value);
paramBuffer.addReturnValue(std::move(retval));
return angle::CallCapture(angle::EntryPoint::EGLCreateNativeClientBufferANDROID,
std::move(paramBuffer));
}
angle::CallCapture CaptureEGLCreateImage(egl::Display *display,
gl::Context *context,
EGLenum target,
EGLClientBuffer buffer,
const egl::AttributeMap &attributes,
egl::Image *image)
{
angle::ParamBuffer paramBuffer;
// The EGL display will be queried directly in the emitted code
// so this is actually just a place holder
paramBuffer.addValueParam("display", angle::ParamType::Tegl_DisplayPointer, display);
// In CaptureMidExecutionSetup and FrameCaptureShared::captureCall
// we capture the actual context ID (via CaptureMakeCurrent),
// so we have to do the same here.
paramBuffer.addValueParam("context", angle::ParamType::Tgl_ContextPointer, context);
paramBuffer.addEnumParam("target", gl::GLESEnum::AllEnums, angle::ParamType::TEGLenum, target);
angle::ParamCapture paramsClientBuffer("buffer", angle::ParamType::TEGLClientBuffer);
uint64_t bufferID = reinterpret_cast<uintptr_t>(buffer);
angle::SetParamVal<angle::ParamType::TGLuint64>(bufferID, &paramsClientBuffer.value);
paramBuffer.addParam(std::move(paramsClientBuffer));
angle::ParamCapture paramsAttr = CaptureAttributeMap(attributes);
paramBuffer.addParam(std::move(paramsAttr));
angle::ParamCapture retval;
angle::SetParamVal<angle::ParamType::TGLeglImageOES, GLeglImageOES>(image, &retval.value);
paramBuffer.addReturnValue(std::move(retval));
return angle::CallCapture(angle::EntryPoint::EGLCreateImage, std::move(paramBuffer));
}
angle::CallCapture CaptureEGLDestroyImage(egl::Display *display, egl::Image *image)
{
angle::ParamBuffer paramBuffer;
paramBuffer.addValueParam("display", angle::ParamType::Tegl_DisplayPointer, display);
angle::ParamCapture paramImage("image", angle::ParamType::TGLeglImageOES);
angle::SetParamVal<angle::ParamType::TGLeglImageOES, GLeglImageOES>(image, &paramImage.value);
paramBuffer.addParam(std::move(paramImage));
return angle::CallCapture(angle::EntryPoint::EGLDestroyImage, std::move(paramBuffer));
}
angle::CallCapture CaptureEGLCreatePbufferSurface(egl::Display *display,
egl::Config *config,
const AttributeMap &attrib_list,
egl::Surface *surface)
{
angle::ParamBuffer paramBuffer;
paramBuffer.addValueParam("display", angle::ParamType::Tegl_DisplayPointer, display);
paramBuffer.addValueParam("config", angle::ParamType::Tegl_ConfigPointer, config);
angle::ParamCapture paramsAttr = CaptureAttributeMapInt(attrib_list);
paramBuffer.addParam(std::move(paramsAttr));
angle::ParamCapture retval;
angle::SetParamVal<angle::ParamType::Tegl_SurfacePointer>(surface, &retval.value);
paramBuffer.addReturnValue(std::move(retval));
return angle::CallCapture(angle::EntryPoint::EGLCreatePbufferSurface, std::move(paramBuffer));
}
angle::CallCapture CaptureEGLDestroySurface(egl::Display *display, egl::Surface *surface)
{
angle::ParamBuffer paramBuffer;
paramBuffer.addValueParam("display", angle::ParamType::Tegl_DisplayPointer, display);
paramBuffer.addValueParam("surface", angle::ParamType::Tegl_SurfacePointer, surface);
return angle::CallCapture(angle::EntryPoint::EGLDestroySurface, std::move(paramBuffer));
}
static angle::CallCapture CaptureEGLBindOrReleaseImage(egl::Display *display,
egl::Surface *surface,
EGLint buffer,
angle::EntryPoint entryPoint)
{
angle::ParamBuffer paramBuffer;
paramBuffer.addValueParam("display", angle::ParamType::Tegl_DisplayPointer, display);
paramBuffer.addValueParam("surface", angle::ParamType::Tegl_SurfacePointer, surface);
paramBuffer.addValueParam("buffer", angle::ParamType::TEGLint, buffer);
return angle::CallCapture(entryPoint, std::move(paramBuffer));
}
angle::CallCapture CaptureEGLBindTexImage(egl::Display *display,
egl::Surface *surface,
EGLint buffer)
{
return CaptureEGLBindOrReleaseImage(display, surface, buffer,
angle::EntryPoint::EGLBindTexImage);
}
angle::CallCapture CaptureEGLReleaseTexImage(egl::Display *display,
egl::Surface *surface,
EGLint buffer)
{
return CaptureEGLBindOrReleaseImage(display, surface, buffer,
angle::EntryPoint::EGLReleaseTexImage);
}
angle::CallCapture CaptureEGLMakeCurrent(egl::Display *display,
Surface *drawSurface,
Surface *readSurface,
gl::Context *context)
{
angle::ParamBuffer paramBuffer;
paramBuffer.addValueParam("display", angle::ParamType::Tegl_DisplayPointer, display);
paramBuffer.addValueParam("draw", angle::ParamType::Tegl_SurfacePointer, drawSurface);
paramBuffer.addValueParam("read", angle::ParamType::Tegl_SurfacePointer, readSurface);
paramBuffer.addValueParam("context", angle::ParamType::Tgl_ContextPointer, context);
return angle::CallCapture(angle::EntryPoint::EGLMakeCurrent, std::move(paramBuffer));
}
} // namespace egl

Просмотреть файл

@ -1,77 +0,0 @@
//
// Copyright 2022 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.
//
// capture_egl.h:
// EGL capture functions
//
#ifndef LIBANGLE_CAPTURE_EGL_H_
#define LIBANGLE_CAPTURE_EGL_H_
#include "libANGLE/Context.h"
#include "libANGLE/Thread.h"
#include "libANGLE/capture/FrameCapture.h"
namespace gl
{
enum class GLenumGroup;
}
namespace egl
{
template <typename CaptureFuncT, typename... ArgsT>
void CaptureCallToCaptureEGL(CaptureFuncT captureFunc, egl::Thread *thread, ArgsT... captureParams)
{
gl::Context *context = thread->getContext();
if (!context)
{
return;
}
angle::FrameCaptureShared *frameCaptureShared =
context->getShareGroup()->getFrameCaptureShared();
if (!frameCaptureShared->isCapturing())
{
return;
}
angle::CallCapture call = captureFunc(captureParams...);
frameCaptureShared->captureCall(context, std::move(call), true);
}
angle::CallCapture CaptureCreateNativeClientBufferANDROID(const egl::AttributeMap &attribMap,
EGLClientBuffer eglClientBuffer);
angle::CallCapture CaptureEGLCreateImage(egl::Display *display,
gl::Context *context,
EGLenum target,
EGLClientBuffer buffer,
const egl::AttributeMap &attributes,
egl::Image *image);
angle::CallCapture CaptureEGLDestroyImage(egl::Display *display, egl::Image *image);
angle::CallCapture CaptureEGLCreatePbufferSurface(egl::Display *display,
egl::Config *config,
const AttributeMap &attrib_list,
egl::Surface *surface);
angle::CallCapture CaptureEGLDestroySurface(egl::Display *display, Surface *surface);
angle::CallCapture CaptureEGLBindTexImage(egl::Display *display,
egl::Surface *surface,
EGLint buffer);
angle::CallCapture CaptureEGLReleaseTexImage(egl::Display *display,
egl::Surface *surface,
EGLint buffer);
angle::CallCapture CaptureEGLMakeCurrent(egl::Display *display,
Surface *drawSurface,
Surface *readSurface,
gl::Context *context);
} // namespace egl
#endif // LIBANGLE_FRAME_CAPTURE_H_

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -0,0 +1,654 @@
// GENERATED FILE - DO NOT EDIT.
// Generated by generate_entry_points.py using data from egl.xml and egl_angle_ext.xml.
//
// 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.
//
// capture_egl_autogen.h:
// Capture functions for the OpenGL ES EGL entry points.
#ifndef LIBANGLE_CAPTURE_EGL_AUTOGEN_H_
#define LIBANGLE_CAPTURE_EGL_AUTOGEN_H_
#include "common/PackedEnums.h"
#include "libANGLE/capture/FrameCapture.h"
namespace egl
{
// Method Captures
angle::CallCapture CaptureChooseConfig(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
const AttributeMap &attrib_listPacked,
EGLConfig *configs,
EGLint config_size,
EGLint *num_config,
EGLBoolean returnValue);
angle::CallCapture CaptureCopyBuffers(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLNativePixmapType target,
EGLBoolean returnValue);
angle::CallCapture CaptureCreateContext(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Config *configPacked,
gl::Context *share_contextPacked,
const AttributeMap &attrib_listPacked,
EGLContext returnValue);
angle::CallCapture CaptureCreatePbufferSurface(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Config *configPacked,
const AttributeMap &attrib_listPacked,
EGLSurface returnValue);
angle::CallCapture CaptureCreatePixmapSurface(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Config *configPacked,
EGLNativePixmapType pixmap,
const AttributeMap &attrib_listPacked,
EGLSurface returnValue);
angle::CallCapture CaptureCreateWindowSurface(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Config *configPacked,
EGLNativeWindowType win,
const AttributeMap &attrib_listPacked,
EGLSurface returnValue);
angle::CallCapture CaptureDestroyContext(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
gl::Context *ctxPacked,
EGLBoolean returnValue);
angle::CallCapture CaptureDestroySurface(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLBoolean returnValue);
angle::CallCapture CaptureGetConfigAttrib(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Config *configPacked,
EGLint attribute,
EGLint *value,
EGLBoolean returnValue);
angle::CallCapture CaptureGetConfigs(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
EGLConfig *configs,
EGLint config_size,
EGLint *num_config,
EGLBoolean returnValue);
angle::CallCapture CaptureGetCurrentDisplay(egl::Thread *thread,
bool isCallValid,
EGLDisplay returnValue);
angle::CallCapture CaptureGetCurrentSurface(egl::Thread *thread,
bool isCallValid,
EGLint readdraw,
EGLSurface returnValue);
angle::CallCapture CaptureGetDisplay(egl::Thread *thread,
bool isCallValid,
EGLNativeDisplayType display_id,
EGLDisplay returnValue);
angle::CallCapture CaptureGetError(egl::Thread *thread, bool isCallValid, EGLint returnValue);
angle::CallCapture CaptureGetProcAddress(egl::Thread *thread,
bool isCallValid,
const char *procname,
__eglMustCastToProperFunctionPointerType returnValue);
angle::CallCapture CaptureInitialize(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
EGLint *major,
EGLint *minor,
EGLBoolean returnValue);
angle::CallCapture CaptureMakeCurrent(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *drawPacked,
egl::Surface *readPacked,
gl::Context *ctxPacked,
EGLBoolean returnValue);
angle::CallCapture CaptureQueryContext(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
gl::Context *ctxPacked,
EGLint attribute,
EGLint *value,
EGLBoolean returnValue);
angle::CallCapture CaptureQueryString(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
EGLint name,
const char *returnValue);
angle::CallCapture CaptureQuerySurface(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLint attribute,
EGLint *value,
EGLBoolean returnValue);
angle::CallCapture CaptureSwapBuffers(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLBoolean returnValue);
angle::CallCapture CaptureTerminate(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
EGLBoolean returnValue);
angle::CallCapture CaptureWaitGL(egl::Thread *thread, bool isCallValid, EGLBoolean returnValue);
angle::CallCapture CaptureWaitNative(egl::Thread *thread,
bool isCallValid,
EGLint engine,
EGLBoolean returnValue);
angle::CallCapture CaptureBindTexImage(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLint buffer,
EGLBoolean returnValue);
angle::CallCapture CaptureReleaseTexImage(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLint buffer,
EGLBoolean returnValue);
angle::CallCapture CaptureSurfaceAttrib(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLint attribute,
EGLint value,
EGLBoolean returnValue);
angle::CallCapture CaptureSwapInterval(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
EGLint interval,
EGLBoolean returnValue);
angle::CallCapture CaptureBindAPI(egl::Thread *thread,
bool isCallValid,
EGLenum api,
EGLBoolean returnValue);
angle::CallCapture CaptureCreatePbufferFromClientBuffer(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
EGLenum buftype,
EGLClientBuffer buffer,
egl::Config *configPacked,
const AttributeMap &attrib_listPacked,
EGLSurface returnValue);
angle::CallCapture CaptureQueryAPI(egl::Thread *thread, bool isCallValid, EGLenum returnValue);
angle::CallCapture CaptureReleaseThread(egl::Thread *thread,
bool isCallValid,
EGLBoolean returnValue);
angle::CallCapture CaptureWaitClient(egl::Thread *thread, bool isCallValid, EGLBoolean returnValue);
angle::CallCapture CaptureGetCurrentContext(egl::Thread *thread,
bool isCallValid,
EGLContext returnValue);
angle::CallCapture CaptureClientWaitSync(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Sync *syncPacked,
EGLint flags,
EGLTime timeout,
EGLint returnValue);
angle::CallCapture CaptureCreateImage(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
gl::Context *ctxPacked,
EGLenum target,
EGLClientBuffer buffer,
const AttributeMap &attrib_listPacked,
EGLImage returnValue);
angle::CallCapture CaptureCreatePlatformPixmapSurface(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Config *configPacked,
void *native_pixmap,
const AttributeMap &attrib_listPacked,
EGLSurface returnValue);
angle::CallCapture CaptureCreatePlatformWindowSurface(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Config *configPacked,
void *native_window,
const AttributeMap &attrib_listPacked,
EGLSurface returnValue);
angle::CallCapture CaptureCreateSync(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
EGLenum type,
const AttributeMap &attrib_listPacked,
EGLSync returnValue);
angle::CallCapture CaptureDestroyImage(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Image *imagePacked,
EGLBoolean returnValue);
angle::CallCapture CaptureDestroySync(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Sync *syncPacked,
EGLBoolean returnValue);
angle::CallCapture CaptureGetPlatformDisplay(egl::Thread *thread,
bool isCallValid,
EGLenum platform,
void *native_display,
const AttributeMap &attrib_listPacked,
EGLDisplay returnValue);
angle::CallCapture CaptureGetSyncAttrib(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Sync *syncPacked,
EGLint attribute,
EGLAttrib *value,
EGLBoolean returnValue);
angle::CallCapture CaptureWaitSync(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Sync *syncPacked,
EGLint flags,
EGLBoolean returnValue);
angle::CallCapture CaptureSetBlobCacheFuncsANDROID(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
EGLSetBlobFuncANDROID set,
EGLGetBlobFuncANDROID get);
angle::CallCapture CaptureCreateNativeClientBufferANDROID(egl::Thread *thread,
bool isCallValid,
const AttributeMap &attrib_listPacked,
EGLClientBuffer returnValue);
angle::CallCapture CaptureGetCompositorTimingSupportedANDROID(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
CompositorTiming namePacked,
EGLBoolean returnValue);
angle::CallCapture CaptureGetCompositorTimingANDROID(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLint numTimestamps,
const EGLint *names,
EGLnsecsANDROID *values,
EGLBoolean returnValue);
angle::CallCapture CaptureGetNextFrameIdANDROID(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLuint64KHR *frameId,
EGLBoolean returnValue);
angle::CallCapture CaptureGetFrameTimestampSupportedANDROID(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
Timestamp timestampPacked,
EGLBoolean returnValue);
angle::CallCapture CaptureGetFrameTimestampsANDROID(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLuint64KHR frameId,
EGLint numTimestamps,
const EGLint *timestamps,
EGLnsecsANDROID *values,
EGLBoolean returnValue);
angle::CallCapture CaptureGetNativeClientBufferANDROID(egl::Thread *thread,
bool isCallValid,
const struct AHardwareBuffer *buffer,
EGLClientBuffer returnValue);
angle::CallCapture CaptureDupNativeFenceFDANDROID(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Sync *syncPacked,
EGLint returnValue);
angle::CallCapture CapturePresentationTimeANDROID(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLnsecsANDROID time,
EGLBoolean returnValue);
angle::CallCapture CaptureCreateDeviceANGLE(egl::Thread *thread,
bool isCallValid,
EGLint device_type,
void *native_device,
const EGLAttrib *attrib_list,
EGLDeviceEXT returnValue);
angle::CallCapture CaptureReleaseDeviceANGLE(egl::Thread *thread,
bool isCallValid,
egl::Device *devicePacked,
EGLBoolean returnValue);
angle::CallCapture CaptureQueryStringiANGLE(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
EGLint name,
EGLint index,
const char *returnValue);
angle::CallCapture CaptureQueryDisplayAttribANGLE(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
EGLint attribute,
EGLAttrib *value,
EGLBoolean returnValue);
angle::CallCapture CaptureCopyMetalSharedEventANGLE(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Sync *syncPacked,
void *returnValue);
angle::CallCapture CaptureReleaseHighPowerGPUANGLE(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
gl::Context *ctxPacked);
angle::CallCapture CaptureReacquireHighPowerGPUANGLE(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
gl::Context *ctxPacked);
angle::CallCapture CaptureHandleGPUSwitchANGLE(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked);
angle::CallCapture CaptureForceGPUSwitchANGLE(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
EGLint gpuIDHigh,
EGLint gpuIDLow);
angle::CallCapture CapturePrepareSwapBuffersANGLE(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLBoolean returnValue);
angle::CallCapture CaptureProgramCacheGetAttribANGLE(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
EGLenum attrib,
EGLint returnValue);
angle::CallCapture CaptureProgramCacheQueryANGLE(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
EGLint index,
void *key,
EGLint *keysize,
void *binary,
EGLint *binarysize);
angle::CallCapture CaptureProgramCachePopulateANGLE(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
const void *key,
EGLint keysize,
const void *binary,
EGLint binarysize);
angle::CallCapture CaptureProgramCacheResizeANGLE(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
EGLint limit,
EGLint mode,
EGLint returnValue);
angle::CallCapture CaptureQuerySurfacePointerANGLE(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLint attribute,
void **value,
EGLBoolean returnValue);
angle::CallCapture CaptureCreateStreamProducerD3DTextureANGLE(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Stream *streamPacked,
const AttributeMap &attrib_listPacked,
EGLBoolean returnValue);
angle::CallCapture CaptureStreamPostD3DTextureANGLE(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Stream *streamPacked,
void *texture,
const AttributeMap &attrib_listPacked,
EGLBoolean returnValue);
angle::CallCapture CaptureSwapBuffersWithFrameTokenANGLE(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLFrameTokenANGLE frametoken,
EGLBoolean returnValue);
angle::CallCapture CaptureGetMscRateANGLE(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLint *numerator,
EGLint *denominator,
EGLBoolean returnValue);
angle::CallCapture CaptureExportVkImageANGLE(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Image *imagePacked,
void *vk_image,
void *vk_image_create_info,
EGLBoolean returnValue);
angle::CallCapture CaptureGetSyncValuesCHROMIUM(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLuint64KHR *ust,
EGLuint64KHR *msc,
EGLuint64KHR *sbc,
EGLBoolean returnValue);
angle::CallCapture CaptureQueryDeviceAttribEXT(egl::Thread *thread,
bool isCallValid,
egl::Device *devicePacked,
EGLint attribute,
EGLAttrib *value,
EGLBoolean returnValue);
angle::CallCapture CaptureQueryDeviceStringEXT(egl::Thread *thread,
bool isCallValid,
egl::Device *devicePacked,
EGLint name,
const char *returnValue);
angle::CallCapture CaptureQueryDisplayAttribEXT(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
EGLint attribute,
EGLAttrib *value,
EGLBoolean returnValue);
angle::CallCapture CaptureQueryDmaBufFormatsEXT(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
EGLint max_formats,
EGLint *formats,
EGLint *num_formats,
EGLBoolean returnValue);
angle::CallCapture CaptureQueryDmaBufModifiersEXT(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
EGLint format,
EGLint max_modifiers,
EGLuint64KHR *modifiers,
EGLBoolean *external_only,
EGLint *num_modifiers,
EGLBoolean returnValue);
angle::CallCapture CaptureCreatePlatformPixmapSurfaceEXT(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Config *configPacked,
void *native_pixmap,
const AttributeMap &attrib_listPacked,
EGLSurface returnValue);
angle::CallCapture CaptureCreatePlatformWindowSurfaceEXT(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Config *configPacked,
void *native_window,
const AttributeMap &attrib_listPacked,
EGLSurface returnValue);
angle::CallCapture CaptureGetPlatformDisplayEXT(egl::Thread *thread,
bool isCallValid,
EGLenum platform,
void *native_display,
const AttributeMap &attrib_listPacked,
EGLDisplay returnValue);
angle::CallCapture CaptureDebugMessageControlKHR(egl::Thread *thread,
bool isCallValid,
EGLDEBUGPROCKHR callback,
const AttributeMap &attrib_listPacked,
EGLint returnValue);
angle::CallCapture CaptureLabelObjectKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *displayPacked,
ObjectType objectTypePacked,
EGLObjectKHR object,
EGLLabelKHR label,
EGLint returnValue);
angle::CallCapture CaptureQueryDebugKHR(egl::Thread *thread,
bool isCallValid,
EGLint attribute,
EGLAttrib *value,
EGLBoolean returnValue);
angle::CallCapture CaptureClientWaitSyncKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Sync *syncPacked,
EGLint flags,
EGLTimeKHR timeout,
EGLint returnValue);
angle::CallCapture CaptureCreateSyncKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
EGLenum type,
const AttributeMap &attrib_listPacked,
EGLSyncKHR returnValue);
angle::CallCapture CaptureDestroySyncKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Sync *syncPacked,
EGLBoolean returnValue);
angle::CallCapture CaptureGetSyncAttribKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Sync *syncPacked,
EGLint attribute,
EGLint *value,
EGLBoolean returnValue);
angle::CallCapture CaptureCreateImageKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
gl::Context *ctxPacked,
EGLenum target,
EGLClientBuffer buffer,
const AttributeMap &attrib_listPacked,
EGLImageKHR returnValue);
angle::CallCapture CaptureDestroyImageKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Image *imagePacked,
EGLBoolean returnValue);
angle::CallCapture CaptureLockSurfaceKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
const AttributeMap &attrib_listPacked,
EGLBoolean returnValue);
angle::CallCapture CaptureQuerySurface64KHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLint attribute,
EGLAttribKHR *value,
EGLBoolean returnValue);
angle::CallCapture CaptureUnlockSurfaceKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLBoolean returnValue);
angle::CallCapture CaptureSetDamageRegionKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLint *rects,
EGLint n_rects,
EGLBoolean returnValue);
angle::CallCapture CaptureSignalSyncKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Sync *syncPacked,
EGLenum mode,
EGLBoolean returnValue);
angle::CallCapture CaptureCreateStreamKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
const AttributeMap &attrib_listPacked,
EGLStreamKHR returnValue);
angle::CallCapture CaptureDestroyStreamKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Stream *streamPacked,
EGLBoolean returnValue);
angle::CallCapture CaptureQueryStreamKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Stream *streamPacked,
EGLenum attribute,
EGLint *value,
EGLBoolean returnValue);
angle::CallCapture CaptureQueryStreamu64KHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Stream *streamPacked,
EGLenum attribute,
EGLuint64KHR *value,
EGLBoolean returnValue);
angle::CallCapture CaptureStreamAttribKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Stream *streamPacked,
EGLenum attribute,
EGLint value,
EGLBoolean returnValue);
angle::CallCapture CaptureStreamConsumerAcquireKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Stream *streamPacked,
EGLBoolean returnValue);
angle::CallCapture CaptureStreamConsumerGLTextureExternalKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Stream *streamPacked,
EGLBoolean returnValue);
angle::CallCapture CaptureStreamConsumerReleaseKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Stream *streamPacked,
EGLBoolean returnValue);
angle::CallCapture CaptureSwapBuffersWithDamageKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
const EGLint *rects,
EGLint n_rects,
EGLBoolean returnValue);
angle::CallCapture CaptureWaitSyncKHR(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Sync *syncPacked,
EGLint flags,
EGLint returnValue);
angle::CallCapture CapturePostSubBufferNV(egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Surface *surfacePacked,
EGLint x,
EGLint y,
EGLint width,
EGLint height,
EGLBoolean returnValue);
angle::CallCapture CaptureStreamConsumerGLTextureExternalAttribsNV(
egl::Thread *thread,
bool isCallValid,
egl::Display *dpyPacked,
egl::Stream *streamPacked,
const AttributeMap &attrib_listPacked,
EGLBoolean returnValue);
} // namespace egl
#endif // LIBANGLE_CAPTURE_EGL_AUTOGEN_H_

Просмотреть файл

@ -21,7 +21,6 @@ namespace gl
{
// GL 1.0
CallCapture CaptureAccum(const State &glState, bool isCallValid, GLenum op, GLfloat value)
{
ParamBuffer paramBuffer;
@ -4458,7 +4457,6 @@ CallCapture CaptureVertex4sv(const State &glState, bool isCallValid, const GLsho
}
// GL 1.1
CallCapture CaptureAreTexturesResident(const State &glState,
bool isCallValid,
GLsizei n,
@ -4783,7 +4781,6 @@ CallCapture CaptureTexSubImage1D(const State &glState,
// GL 1.2
// GL 1.3
CallCapture CaptureCompressedTexImage1D(const State &glState,
bool isCallValid,
GLenum target,
@ -5638,7 +5635,6 @@ CallCapture CaptureMultiTexCoord4sv(const State &glState,
}
// GL 1.4
CallCapture CaptureFogCoordPointer(const State &glState,
bool isCallValid,
GLenum type,
@ -6470,7 +6466,6 @@ CallCapture CaptureWindowPos3sv(const State &glState, bool isCallValid, const GL
}
// GL 1.5
CallCapture CaptureGetBufferSubData(const State &glState,
bool isCallValid,
GLenum target,

Просмотреть файл

@ -21,7 +21,6 @@ namespace gl
{
// GL 2.0
CallCapture CaptureGetVertexAttribdv(const State &glState,
bool isCallValid,
GLuint index,

Просмотреть файл

@ -21,7 +21,6 @@ namespace gl
{
// GL 3.0
CallCapture CaptureBeginConditionalRender(const State &glState,
bool isCallValid,
GLuint id,
@ -479,7 +478,6 @@ CallCapture CaptureVertexAttribI4usv(const State &glState,
}
// GL 3.1
CallCapture CaptureGetActiveUniformName(const State &glState,
bool isCallValid,
ShaderProgramID programPacked,
@ -539,7 +537,6 @@ CallCapture CapturePrimitiveRestartIndex(const State &glState, bool isCallValid,
}
// GL 3.2
CallCapture CaptureMultiDrawElementsBaseVertex(const State &glState,
bool isCallValid,
PrimitiveMode modePacked,
@ -669,7 +666,6 @@ CallCapture CaptureTexImage3DMultisample(const State &glState,
}
// GL 3.3
CallCapture CaptureBindFragDataLocationIndexed(const State &glState,
bool isCallValid,
ShaderProgramID programPacked,

Просмотреть файл

@ -21,7 +21,6 @@ namespace gl
{
// GL 4.0
CallCapture CaptureBeginQueryIndexed(const State &glState,
bool isCallValid,
GLenum target,
@ -931,7 +930,6 @@ CallCapture CaptureUniformSubroutinesuiv(const State &glState,
}
// GL 4.1
CallCapture CaptureDepthRangeArrayv(const State &glState,
bool isCallValid,
GLuint first,
@ -1923,7 +1921,6 @@ CallCapture CaptureViewportIndexedfv(const State &glState,
}
// GL 4.2
CallCapture CaptureDrawArraysInstancedBaseInstance(const State &glState,
bool isCallValid,
PrimitiveMode modePacked,
@ -2108,7 +2105,6 @@ CallCapture CaptureTexStorage1D(const State &glState,
}
// GL 4.3
CallCapture CaptureClearBufferData(const State &glState,
bool isCallValid,
GLenum target,
@ -2446,7 +2442,6 @@ CallCapture CaptureVertexAttribLFormat(const State &glState,
}
// GL 4.4
CallCapture CaptureBindBuffersBase(const State &glState,
bool isCallValid,
GLenum target,
@ -2811,7 +2806,6 @@ CallCapture CaptureClearTexSubImage(const State &glState,
}
// GL 4.5
CallCapture CaptureBindTextureUnit(const State &glState,
bool isCallValid,
GLuint unit,
@ -5961,7 +5955,6 @@ CallCapture CaptureVertexArrayVertexBuffers(const State &glState,
}
// GL 4.6
CallCapture CaptureMultiDrawArraysIndirectCount(const State &glState,
bool isCallValid,
GLenum mode,

Просмотреть файл

@ -19,7 +19,6 @@ using namespace angle;
namespace gl
{
CallCapture CaptureAlphaFunc(const State &glState,
bool isCallValid,
AlphaTestFunc funcPacked,

Просмотреть файл

@ -19,7 +19,6 @@ using namespace angle;
namespace gl
{
CallCapture CaptureActiveTexture(const State &glState, bool isCallValid, GLenum texture)
{
ParamBuffer paramBuffer;

Просмотреть файл

@ -19,7 +19,6 @@ using namespace angle;
namespace gl
{
CallCapture CaptureBeginQuery(const State &glState,
bool isCallValid,
QueryType targetPacked,

Просмотреть файл

@ -19,7 +19,6 @@ using namespace angle;
namespace gl
{
CallCapture CaptureActiveShaderProgram(const State &glState,
bool isCallValid,
ProgramPipelineID pipelinePacked,

Просмотреть файл

@ -19,7 +19,6 @@ using namespace angle;
namespace gl
{
CallCapture CaptureBlendBarrier(const State &glState, bool isCallValid)
{
ParamBuffer paramBuffer;

Просмотреть файл

@ -19,7 +19,6 @@ using namespace angle;
namespace gl
{
CallCapture CaptureBeginPerfMonitorAMD(const State &glState, bool isCallValid, GLuint monitor)
{
ParamBuffer paramBuffer;

Просмотреть файл

@ -71,6 +71,9 @@ void WriteParamCaptureReplay(std::ostream &os, const CallCapture &call, const Pa
WriteParamValueReplay<ParamType::TEGLAttribPointer>(os, call,
param.value.EGLAttribPointerVal);
break;
case ParamType::TEGLBoolean:
WriteParamValueReplay<ParamType::TEGLBoolean>(os, call, param.value.EGLBooleanVal);
break;
case ParamType::TEGLBooleanPointer:
WriteParamValueReplay<ParamType::TEGLBooleanPointer>(os, call,
param.value.EGLBooleanPointerVal);
@ -83,10 +86,19 @@ void WriteParamCaptureReplay(std::ostream &os, const CallCapture &call, const Pa
WriteParamValueReplay<ParamType::TEGLConfigPointer>(os, call,
param.value.EGLConfigPointerVal);
break;
case ParamType::TEGLContext:
WriteParamValueReplay<ParamType::TEGLContext>(os, call, param.value.EGLContextVal);
break;
case ParamType::TEGLDEBUGPROCKHR:
WriteParamValueReplay<ParamType::TEGLDEBUGPROCKHR>(os, call,
param.value.EGLDEBUGPROCKHRVal);
break;
case ParamType::TEGLDeviceEXT:
WriteParamValueReplay<ParamType::TEGLDeviceEXT>(os, call, param.value.EGLDeviceEXTVal);
break;
case ParamType::TEGLDisplay:
WriteParamValueReplay<ParamType::TEGLDisplay>(os, call, param.value.EGLDisplayVal);
break;
case ParamType::TEGLFrameTokenANGLE:
WriteParamValueReplay<ParamType::TEGLFrameTokenANGLE>(
os, call, param.value.EGLFrameTokenANGLEVal);
@ -95,6 +107,12 @@ void WriteParamCaptureReplay(std::ostream &os, const CallCapture &call, const Pa
WriteParamValueReplay<ParamType::TEGLGetBlobFuncANDROID>(
os, call, param.value.EGLGetBlobFuncANDROIDVal);
break;
case ParamType::TEGLImage:
WriteParamValueReplay<ParamType::TEGLImage>(os, call, param.value.EGLImageVal);
break;
case ParamType::TEGLImageKHR:
WriteParamValueReplay<ParamType::TEGLImageKHR>(os, call, param.value.EGLImageKHRVal);
break;
case ParamType::TEGLLabelKHR:
WriteParamValueReplay<ParamType::TEGLLabelKHR>(os, call, param.value.EGLLabelKHRVal);
break;
@ -117,6 +135,18 @@ void WriteParamCaptureReplay(std::ostream &os, const CallCapture &call, const Pa
WriteParamValueReplay<ParamType::TEGLSetBlobFuncANDROID>(
os, call, param.value.EGLSetBlobFuncANDROIDVal);
break;
case ParamType::TEGLStreamKHR:
WriteParamValueReplay<ParamType::TEGLStreamKHR>(os, call, param.value.EGLStreamKHRVal);
break;
case ParamType::TEGLSurface:
WriteParamValueReplay<ParamType::TEGLSurface>(os, call, param.value.EGLSurfaceVal);
break;
case ParamType::TEGLSync:
WriteParamValueReplay<ParamType::TEGLSync>(os, call, param.value.EGLSyncVal);
break;
case ParamType::TEGLSyncKHR:
WriteParamValueReplay<ParamType::TEGLSyncKHR>(os, call, param.value.EGLSyncKHRVal);
break;
case ParamType::TEGLTime:
WriteParamValueReplay<ParamType::TEGLTime>(os, call, param.value.EGLTimeVal);
break;
@ -647,55 +677,75 @@ const char *ParamTypeToString(ParamType paramType)
case ParamType::TDrawElementsType:
return "GLenum";
case ParamType::TEGLAttribConstPointer:
return "const GLenum *";
return "const EGLAttrib *";
case ParamType::TEGLAttribKHRPointer:
return "GLenum *";
return "EGLAttribKHR *";
case ParamType::TEGLAttribPointer:
return "GLenum *";
return "EGLAttrib *";
case ParamType::TEGLBoolean:
return "EGLBoolean";
case ParamType::TEGLBooleanPointer:
return "GLenum *";
return "EGLBoolean *";
case ParamType::TEGLClientBuffer:
return "GLenum";
return "EGLClientBuffer";
case ParamType::TEGLConfigPointer:
return "GLenum *";
return "EGLConfig *";
case ParamType::TEGLContext:
return "EGLContext";
case ParamType::TEGLDEBUGPROCKHR:
return "GLenum";
return "EGLDEBUGPROCKHR";
case ParamType::TEGLDeviceEXT:
return "EGLDeviceEXT";
case ParamType::TEGLDisplay:
return "EGLDisplay";
case ParamType::TEGLFrameTokenANGLE:
return "GLenum";
return "EGLFrameTokenANGLE";
case ParamType::TEGLGetBlobFuncANDROID:
return "GLenum";
return "EGLGetBlobFuncANDROID";
case ParamType::TEGLImage:
return "EGLImage";
case ParamType::TEGLImageKHR:
return "EGLImageKHR";
case ParamType::TEGLLabelKHR:
return "GLenum";
return "EGLLabelKHR";
case ParamType::TEGLNativeDisplayType:
return "GLenum";
return "EGLNativeDisplayType";
case ParamType::TEGLNativePixmapType:
return "GLenum";
return "EGLNativePixmapType";
case ParamType::TEGLNativeWindowType:
return "GLenum";
return "EGLNativeWindowType";
case ParamType::TEGLObjectKHR:
return "GLenum";
return "EGLObjectKHR";
case ParamType::TEGLSetBlobFuncANDROID:
return "GLenum";
return "EGLSetBlobFuncANDROID";
case ParamType::TEGLStreamKHR:
return "EGLStreamKHR";
case ParamType::TEGLSurface:
return "EGLSurface";
case ParamType::TEGLSync:
return "EGLSync";
case ParamType::TEGLSyncKHR:
return "EGLSyncKHR";
case ParamType::TEGLTime:
return "GLenum";
return "EGLTime";
case ParamType::TEGLTimeKHR:
return "GLenum";
return "EGLTimeKHR";
case ParamType::TEGLenum:
return "GLenum";
return "EGLenum";
case ParamType::TEGLint:
return "GLenum";
return "EGLint";
case ParamType::TEGLintConstPointer:
return "const GLenum *";
return "const EGLint *";
case ParamType::TEGLintPointer:
return "GLenum *";
return "EGLint *";
case ParamType::TEGLnsecsANDROID:
return "GLenum";
return "EGLnsecsANDROID";
case ParamType::TEGLnsecsANDROIDPointer:
return "GLenum *";
return "EGLnsecsANDROID *";
case ParamType::TEGLuint64KHR:
return "GLenum";
return "EGLuint64KHR";
case ParamType::TEGLuint64KHRPointer:
return "GLenum *";
return "EGLuint64KHR *";
case ParamType::TFenceNVID:
return "GLuint";
case ParamType::TFenceNVIDConstPointer:

Просмотреть файл

@ -31,18 +31,28 @@ enum class ParamType
TEGLAttribConstPointer,
TEGLAttribKHRPointer,
TEGLAttribPointer,
TEGLBoolean,
TEGLBooleanPointer,
TEGLClientBuffer,
TEGLConfigPointer,
TEGLContext,
TEGLDEBUGPROCKHR,
TEGLDeviceEXT,
TEGLDisplay,
TEGLFrameTokenANGLE,
TEGLGetBlobFuncANDROID,
TEGLImage,
TEGLImageKHR,
TEGLLabelKHR,
TEGLNativeDisplayType,
TEGLNativePixmapType,
TEGLNativeWindowType,
TEGLObjectKHR,
TEGLSetBlobFuncANDROID,
TEGLStreamKHR,
TEGLSurface,
TEGLSync,
TEGLSyncKHR,
TEGLTime,
TEGLTimeKHR,
TEGLenum,
@ -179,7 +189,7 @@ enum class ParamType
TvoidPointerPointer,
};
constexpr uint32_t kParamTypeCount = 160;
constexpr uint32_t kParamTypeCount = 170;
union ParamValue
{
@ -197,18 +207,28 @@ union ParamValue
const EGLAttrib *EGLAttribConstPointerVal;
EGLAttribKHR *EGLAttribKHRPointerVal;
EGLAttrib *EGLAttribPointerVal;
EGLBoolean EGLBooleanVal;
EGLBoolean *EGLBooleanPointerVal;
EGLClientBuffer EGLClientBufferVal;
EGLConfig *EGLConfigPointerVal;
EGLContext EGLContextVal;
EGLDEBUGPROCKHR EGLDEBUGPROCKHRVal;
EGLDeviceEXT EGLDeviceEXTVal;
EGLDisplay EGLDisplayVal;
EGLFrameTokenANGLE EGLFrameTokenANGLEVal;
EGLGetBlobFuncANDROID EGLGetBlobFuncANDROIDVal;
EGLImage EGLImageVal;
EGLImageKHR EGLImageKHRVal;
EGLLabelKHR EGLLabelKHRVal;
EGLNativeDisplayType EGLNativeDisplayTypeVal;
EGLNativePixmapType EGLNativePixmapTypeVal;
EGLNativeWindowType EGLNativeWindowTypeVal;
EGLObjectKHR EGLObjectKHRVal;
EGLSetBlobFuncANDROID EGLSetBlobFuncANDROIDVal;
EGLStreamKHR EGLStreamKHRVal;
EGLSurface EGLSurfaceVal;
EGLSync EGLSyncVal;
EGLSyncKHR EGLSyncKHRVal;
EGLTime EGLTimeVal;
EGLTimeKHR EGLTimeKHRVal;
EGLenum EGLenumVal;
@ -444,6 +464,12 @@ inline EGLAttrib *GetParamVal<ParamType::TEGLAttribPointer, EGLAttrib *>(const P
return value.EGLAttribPointerVal;
}
template <>
inline EGLBoolean GetParamVal<ParamType::TEGLBoolean, EGLBoolean>(const ParamValue &value)
{
return value.EGLBooleanVal;
}
template <>
inline EGLBoolean *GetParamVal<ParamType::TEGLBooleanPointer, EGLBoolean *>(const ParamValue &value)
{
@ -463,6 +489,12 @@ inline EGLConfig *GetParamVal<ParamType::TEGLConfigPointer, EGLConfig *>(const P
return value.EGLConfigPointerVal;
}
template <>
inline EGLContext GetParamVal<ParamType::TEGLContext, EGLContext>(const ParamValue &value)
{
return value.EGLContextVal;
}
template <>
inline EGLDEBUGPROCKHR GetParamVal<ParamType::TEGLDEBUGPROCKHR, EGLDEBUGPROCKHR>(
const ParamValue &value)
@ -470,6 +502,18 @@ inline EGLDEBUGPROCKHR GetParamVal<ParamType::TEGLDEBUGPROCKHR, EGLDEBUGPROCKHR>
return value.EGLDEBUGPROCKHRVal;
}
template <>
inline EGLDeviceEXT GetParamVal<ParamType::TEGLDeviceEXT, EGLDeviceEXT>(const ParamValue &value)
{
return value.EGLDeviceEXTVal;
}
template <>
inline EGLDisplay GetParamVal<ParamType::TEGLDisplay, EGLDisplay>(const ParamValue &value)
{
return value.EGLDisplayVal;
}
template <>
inline EGLFrameTokenANGLE GetParamVal<ParamType::TEGLFrameTokenANGLE, EGLFrameTokenANGLE>(
const ParamValue &value)
@ -484,6 +528,18 @@ inline EGLGetBlobFuncANDROID GetParamVal<ParamType::TEGLGetBlobFuncANDROID, EGLG
return value.EGLGetBlobFuncANDROIDVal;
}
template <>
inline EGLImage GetParamVal<ParamType::TEGLImage, EGLImage>(const ParamValue &value)
{
return value.EGLImageVal;
}
template <>
inline EGLImageKHR GetParamVal<ParamType::TEGLImageKHR, EGLImageKHR>(const ParamValue &value)
{
return value.EGLImageKHRVal;
}
template <>
inline EGLLabelKHR GetParamVal<ParamType::TEGLLabelKHR, EGLLabelKHR>(const ParamValue &value)
{
@ -524,6 +580,30 @@ inline EGLSetBlobFuncANDROID GetParamVal<ParamType::TEGLSetBlobFuncANDROID, EGLS
return value.EGLSetBlobFuncANDROIDVal;
}
template <>
inline EGLStreamKHR GetParamVal<ParamType::TEGLStreamKHR, EGLStreamKHR>(const ParamValue &value)
{
return value.EGLStreamKHRVal;
}
template <>
inline EGLSurface GetParamVal<ParamType::TEGLSurface, EGLSurface>(const ParamValue &value)
{
return value.EGLSurfaceVal;
}
template <>
inline EGLSync GetParamVal<ParamType::TEGLSync, EGLSync>(const ParamValue &value)
{
return value.EGLSyncVal;
}
template <>
inline EGLSyncKHR GetParamVal<ParamType::TEGLSyncKHR, EGLSyncKHR>(const ParamValue &value)
{
return value.EGLSyncKHRVal;
}
template <>
inline EGLTime GetParamVal<ParamType::TEGLTime, EGLTime>(const ParamValue &value)
{
@ -1449,18 +1529,30 @@ T AccessParamValue(ParamType paramType, const ParamValue &value)
return GetParamVal<ParamType::TEGLAttribKHRPointer, T>(value);
case ParamType::TEGLAttribPointer:
return GetParamVal<ParamType::TEGLAttribPointer, T>(value);
case ParamType::TEGLBoolean:
return GetParamVal<ParamType::TEGLBoolean, T>(value);
case ParamType::TEGLBooleanPointer:
return GetParamVal<ParamType::TEGLBooleanPointer, T>(value);
case ParamType::TEGLClientBuffer:
return GetParamVal<ParamType::TEGLClientBuffer, T>(value);
case ParamType::TEGLConfigPointer:
return GetParamVal<ParamType::TEGLConfigPointer, T>(value);
case ParamType::TEGLContext:
return GetParamVal<ParamType::TEGLContext, T>(value);
case ParamType::TEGLDEBUGPROCKHR:
return GetParamVal<ParamType::TEGLDEBUGPROCKHR, T>(value);
case ParamType::TEGLDeviceEXT:
return GetParamVal<ParamType::TEGLDeviceEXT, T>(value);
case ParamType::TEGLDisplay:
return GetParamVal<ParamType::TEGLDisplay, T>(value);
case ParamType::TEGLFrameTokenANGLE:
return GetParamVal<ParamType::TEGLFrameTokenANGLE, T>(value);
case ParamType::TEGLGetBlobFuncANDROID:
return GetParamVal<ParamType::TEGLGetBlobFuncANDROID, T>(value);
case ParamType::TEGLImage:
return GetParamVal<ParamType::TEGLImage, T>(value);
case ParamType::TEGLImageKHR:
return GetParamVal<ParamType::TEGLImageKHR, T>(value);
case ParamType::TEGLLabelKHR:
return GetParamVal<ParamType::TEGLLabelKHR, T>(value);
case ParamType::TEGLNativeDisplayType:
@ -1473,6 +1565,14 @@ T AccessParamValue(ParamType paramType, const ParamValue &value)
return GetParamVal<ParamType::TEGLObjectKHR, T>(value);
case ParamType::TEGLSetBlobFuncANDROID:
return GetParamVal<ParamType::TEGLSetBlobFuncANDROID, T>(value);
case ParamType::TEGLStreamKHR:
return GetParamVal<ParamType::TEGLStreamKHR, T>(value);
case ParamType::TEGLSurface:
return GetParamVal<ParamType::TEGLSurface, T>(value);
case ParamType::TEGLSync:
return GetParamVal<ParamType::TEGLSync, T>(value);
case ParamType::TEGLSyncKHR:
return GetParamVal<ParamType::TEGLSyncKHR, T>(value);
case ParamType::TEGLTime:
return GetParamVal<ParamType::TEGLTime, T>(value);
case ParamType::TEGLTimeKHR:
@ -1840,6 +1940,12 @@ inline void SetParamVal<ParamType::TEGLAttribPointer>(EGLAttrib *valueIn, ParamV
valueOut->EGLAttribPointerVal = valueIn;
}
template <>
inline void SetParamVal<ParamType::TEGLBoolean>(EGLBoolean valueIn, ParamValue *valueOut)
{
valueOut->EGLBooleanVal = valueIn;
}
template <>
inline void SetParamVal<ParamType::TEGLBooleanPointer>(EGLBoolean *valueIn, ParamValue *valueOut)
{
@ -1858,12 +1964,30 @@ inline void SetParamVal<ParamType::TEGLConfigPointer>(EGLConfig *valueIn, ParamV
valueOut->EGLConfigPointerVal = valueIn;
}
template <>
inline void SetParamVal<ParamType::TEGLContext>(EGLContext valueIn, ParamValue *valueOut)
{
valueOut->EGLContextVal = valueIn;
}
template <>
inline void SetParamVal<ParamType::TEGLDEBUGPROCKHR>(EGLDEBUGPROCKHR valueIn, ParamValue *valueOut)
{
valueOut->EGLDEBUGPROCKHRVal = valueIn;
}
template <>
inline void SetParamVal<ParamType::TEGLDeviceEXT>(EGLDeviceEXT valueIn, ParamValue *valueOut)
{
valueOut->EGLDeviceEXTVal = valueIn;
}
template <>
inline void SetParamVal<ParamType::TEGLDisplay>(EGLDisplay valueIn, ParamValue *valueOut)
{
valueOut->EGLDisplayVal = valueIn;
}
template <>
inline void SetParamVal<ParamType::TEGLFrameTokenANGLE>(EGLFrameTokenANGLE valueIn,
ParamValue *valueOut)
@ -1878,6 +2002,18 @@ inline void SetParamVal<ParamType::TEGLGetBlobFuncANDROID>(EGLGetBlobFuncANDROID
valueOut->EGLGetBlobFuncANDROIDVal = valueIn;
}
template <>
inline void SetParamVal<ParamType::TEGLImage>(EGLImage valueIn, ParamValue *valueOut)
{
valueOut->EGLImageVal = valueIn;
}
template <>
inline void SetParamVal<ParamType::TEGLImageKHR>(EGLImageKHR valueIn, ParamValue *valueOut)
{
valueOut->EGLImageKHRVal = valueIn;
}
template <>
inline void SetParamVal<ParamType::TEGLLabelKHR>(EGLLabelKHR valueIn, ParamValue *valueOut)
{
@ -1918,6 +2054,30 @@ inline void SetParamVal<ParamType::TEGLSetBlobFuncANDROID>(EGLSetBlobFuncANDROID
valueOut->EGLSetBlobFuncANDROIDVal = valueIn;
}
template <>
inline void SetParamVal<ParamType::TEGLStreamKHR>(EGLStreamKHR valueIn, ParamValue *valueOut)
{
valueOut->EGLStreamKHRVal = valueIn;
}
template <>
inline void SetParamVal<ParamType::TEGLSurface>(EGLSurface valueIn, ParamValue *valueOut)
{
valueOut->EGLSurfaceVal = valueIn;
}
template <>
inline void SetParamVal<ParamType::TEGLSync>(EGLSync valueIn, ParamValue *valueOut)
{
valueOut->EGLSyncVal = valueIn;
}
template <>
inline void SetParamVal<ParamType::TEGLSyncKHR>(EGLSyncKHR valueIn, ParamValue *valueOut)
{
valueOut->EGLSyncKHRVal = valueIn;
}
template <>
inline void SetParamVal<ParamType::TEGLTime>(EGLTime valueIn, ParamValue *valueOut)
{
@ -2831,6 +2991,9 @@ void InitParamValue(ParamType paramType, T valueIn, ParamValue *valueOut)
case ParamType::TEGLAttribPointer:
SetParamVal<ParamType::TEGLAttribPointer>(valueIn, valueOut);
break;
case ParamType::TEGLBoolean:
SetParamVal<ParamType::TEGLBoolean>(valueIn, valueOut);
break;
case ParamType::TEGLBooleanPointer:
SetParamVal<ParamType::TEGLBooleanPointer>(valueIn, valueOut);
break;
@ -2840,15 +3003,30 @@ void InitParamValue(ParamType paramType, T valueIn, ParamValue *valueOut)
case ParamType::TEGLConfigPointer:
SetParamVal<ParamType::TEGLConfigPointer>(valueIn, valueOut);
break;
case ParamType::TEGLContext:
SetParamVal<ParamType::TEGLContext>(valueIn, valueOut);
break;
case ParamType::TEGLDEBUGPROCKHR:
SetParamVal<ParamType::TEGLDEBUGPROCKHR>(valueIn, valueOut);
break;
case ParamType::TEGLDeviceEXT:
SetParamVal<ParamType::TEGLDeviceEXT>(valueIn, valueOut);
break;
case ParamType::TEGLDisplay:
SetParamVal<ParamType::TEGLDisplay>(valueIn, valueOut);
break;
case ParamType::TEGLFrameTokenANGLE:
SetParamVal<ParamType::TEGLFrameTokenANGLE>(valueIn, valueOut);
break;
case ParamType::TEGLGetBlobFuncANDROID:
SetParamVal<ParamType::TEGLGetBlobFuncANDROID>(valueIn, valueOut);
break;
case ParamType::TEGLImage:
SetParamVal<ParamType::TEGLImage>(valueIn, valueOut);
break;
case ParamType::TEGLImageKHR:
SetParamVal<ParamType::TEGLImageKHR>(valueIn, valueOut);
break;
case ParamType::TEGLLabelKHR:
SetParamVal<ParamType::TEGLLabelKHR>(valueIn, valueOut);
break;
@ -2867,6 +3045,18 @@ void InitParamValue(ParamType paramType, T valueIn, ParamValue *valueOut)
case ParamType::TEGLSetBlobFuncANDROID:
SetParamVal<ParamType::TEGLSetBlobFuncANDROID>(valueIn, valueOut);
break;
case ParamType::TEGLStreamKHR:
SetParamVal<ParamType::TEGLStreamKHR>(valueIn, valueOut);
break;
case ParamType::TEGLSurface:
SetParamVal<ParamType::TEGLSurface>(valueIn, valueOut);
break;
case ParamType::TEGLSync:
SetParamVal<ParamType::TEGLSync>(valueIn, valueOut);
break;
case ParamType::TEGLSyncKHR:
SetParamVal<ParamType::TEGLSyncKHR>(valueIn, valueOut);
break;
case ParamType::TEGLTime:
SetParamVal<ParamType::TEGLTime>(valueIn, valueOut);
break;

Просмотреть файл

@ -110,7 +110,7 @@ extern EGLImageMap gEGLImageMap;
// TODO(http://www.anglebug.com/5878): avoid std::unordered_map, it's slow
using SyncResourceMap = std::unordered_map<uintptr_t, GLsync>;
extern SyncResourceMap gSyncMap;
using ContextMap = std::unordered_map<uint32_t, EGLContext>;
using ContextMap = std::unordered_map<uintptr_t, EGLContext>;
extern ContextMap gContextMap;
using SurfaceMap = std::unordered_map<uintptr_t, EGLSurface>;
@ -137,7 +137,6 @@ void UpdateShaderProgramID(GLuint id, GLsizei readBufferOffset);
void UpdateTextureID(GLuint id, GLsizei readBufferOffset);
void UpdateTransformFeedbackID(GLuint id, GLsizei readBufferOffset);
void UpdateVertexArrayID(GLuint id, GLsizei readBufferOffset);
void UpdateBufferID2(GLuint id, GLsizei readBufferOffset);
void UpdateClientBuffer(EGLClientBuffer key, EGLClientBuffer data);
EGLClientBuffer GetClientBuffer(EGLenum target, uint64_t key);

Просмотреть файл

@ -91,11 +91,9 @@ constexpr ANGLE_INLINE ReturnType GetDefaultReturnValue()
}
#if ANGLE_CAPTURE_ENABLED
# define ANGLE_CAPTURE_GL(Func, ...) CaptureCallToFrameCapture(Capture##Func, __VA_ARGS__)
# define ANGLE_CAPTURE_EGL(Func, ...) CaptureCallToCaptureEGL(Capture##Func, __VA_ARGS__)
# define ANGLE_CAPTURE_GL(Func, ...) CaptureGLCallToFrameCapture(Capture##Func, __VA_ARGS__)
#else
# define ANGLE_CAPTURE_GL(...)
# define ANGLE_CAPTURE_EGL(...)
#endif // ANGLE_CAPTURE_ENABLED
#define EGL_EVENT(EP, FMT, ...) EVENT(nullptr, EGL##EP, FMT, ##__VA_ARGS__)
@ -122,6 +120,12 @@ inline int CID(EGLDisplay display, EGLContext context)
}
return gl::CID(contextPtr);
}
#if ANGLE_CAPTURE_ENABLED
# define ANGLE_CAPTURE_EGL(Func, ...) CaptureEGLCallToFrameCapture(Capture##Func, __VA_ARGS__)
#else
# define ANGLE_CAPTURE_EGL(...)
#endif // ANGLE_CAPTURE_ENABLED
} // namespace egl
#endif // LIBANGLE_ENTRY_POINT_UTILS_H_

Просмотреть файл

@ -543,7 +543,7 @@ libangle_mac_sources = [
# The frame capture headers are always visible to libANGLE.
libangle_sources += [
"src/libANGLE/capture/FrameCapture.h",
"src/libANGLE/capture/capture_egl.h",
"src/libANGLE/capture/capture_egl_autogen.h",
"src/libANGLE/capture/capture_gl_1_autogen.h",
"src/libANGLE/capture/capture_gl_2_autogen.h",
"src/libANGLE/capture/capture_gl_3_autogen.h",
@ -562,7 +562,7 @@ libangle_sources += [
libangle_capture_sources = [
"src/libANGLE/capture/FrameCapture.cpp",
"src/libANGLE/capture/capture_egl.cpp",
"src/libANGLE/capture/capture_egl_autogen.cpp",
"src/libANGLE/capture/capture_gl_1_autogen.cpp",
"src/libANGLE/capture/capture_gl_1_params.cpp",
"src/libANGLE/capture/capture_gl_2_autogen.cpp",

Просмотреть файл

@ -13,8 +13,6 @@
#include "libANGLE/EGLSync.h"
#include "libANGLE/Surface.h"
#include "libANGLE/Thread.h"
#include "libANGLE/capture/capture_egl.h"
#include "libANGLE/capture/frame_capture_utils_autogen.h"
#include "libANGLE/entry_points_utils.h"
#include "libANGLE/queryutils.h"
#include "libANGLE/renderer/DisplayImpl.h"
@ -55,8 +53,6 @@ EGLImageKHR CreateImageKHR(Thread *thread,
ANGLE_EGL_TRY_RETURN(thread, display->createImage(context, target, buffer, attributes, &image),
"", GetDisplayIfValid(display), EGL_NO_IMAGE);
ANGLE_CAPTURE_EGL(EGLCreateImage, thread, display, context, target, buffer, attributes, image);
thread->setSuccess();
return static_cast<EGLImage>(image);
}
@ -68,8 +64,6 @@ EGLClientBuffer CreateNativeClientBufferANDROID(Thread *thread, const AttributeM
egl::Display::CreateNativeClientBuffer(attribMap, &eglClientBuffer),
"eglCreateNativeClientBufferANDROID", nullptr, nullptr);
ANGLE_CAPTURE_EGL(CreateNativeClientBufferANDROID, thread, attribMap, eglClientBuffer);
thread->setSuccess();
return eglClientBuffer;
}
@ -157,8 +151,6 @@ EGLBoolean DestroyImageKHR(Thread *thread, Display *display, Image *img)
GetDisplayIfValid(display), EGL_FALSE);
display->destroyImage(img);
ANGLE_CAPTURE_EGL(EGLDestroyImage, thread, display, img);
thread->setSuccess();
return EGL_TRUE;
}

Просмотреть файл

@ -14,8 +14,6 @@
#include "libANGLE/EGLSync.h"
#include "libANGLE/Surface.h"
#include "libANGLE/Thread.h"
#include "libANGLE/capture/capture_egl.h"
#include "libANGLE/capture/frame_capture_utils_autogen.h"
#include "libANGLE/capture/gl_enum_utils_autogen.h"
#include "libANGLE/queryutils.h"
#include "libANGLE/validationEGL.h"
@ -71,8 +69,6 @@ EGLBoolean BindTexImage(Thread *thread, Display *display, Surface *eglSurface, E
gl::Texture *textureObject = context->getTextureByType(type);
ANGLE_EGL_TRY_RETURN(thread, eglSurface->bindTexImage(context, textureObject, buffer),
"eglBindTexImage", GetSurfaceIfValid(display, eglSurface), EGL_FALSE);
ANGLE_CAPTURE_EGL(EGLBindTexImage, thread, display, eglSurface, buffer);
}
thread->setSuccess();
@ -159,8 +155,6 @@ EGLImage CreateImage(Thread *thread,
return EGL_NO_IMAGE;
}
ANGLE_CAPTURE_EGL(EGLCreateImage, thread, display, context, target, buffer, attributes, image);
thread->setSuccess();
return static_cast<EGLImage>(image);
}
@ -195,8 +189,6 @@ EGLSurface CreatePbufferSurface(Thread *thread,
ANGLE_EGL_TRY_RETURN(thread, display->createPbufferSurface(configuration, attributes, &surface),
"eglCreatePbufferSurface", GetDisplayIfValid(display), EGL_NO_SURFACE);
ANGLE_CAPTURE_EGL(EGLCreatePbufferSurface, thread, display, configuration, attributes, surface);
return static_cast<EGLSurface>(surface);
}
@ -302,16 +294,12 @@ EGLBoolean DestroyImage(Thread *thread, Display *display, Image *img)
GetDisplayIfValid(display), EGL_FALSE);
display->destroyImage(img);
ANGLE_CAPTURE_EGL(EGLDestroyImage, thread, display, img);
thread->setSuccess();
return EGL_TRUE;
}
EGLBoolean DestroySurface(Thread *thread, Display *display, Surface *eglSurface)
{
ANGLE_CAPTURE_EGL(EGLDestroySurface, thread, display, eglSurface);
ANGLE_EGL_TRY_RETURN(thread, display->prepareForCall(), "eglDestroySurface",
GetDisplayIfValid(display), EGL_FALSE);
@ -502,8 +490,6 @@ EGLBoolean MakeCurrent(Thread *thread,
thread,
display->makeCurrent(thread, previousContext, drawSurface, readSurface, context),
"eglMakeCurrent", GetContextIfValid(display, context), EGL_FALSE);
ANGLE_CAPTURE_EGL(EGLMakeCurrent, thread, display, drawSurface, readSurface, context);
}
thread->setSuccess();
@ -605,7 +591,6 @@ EGLBoolean ReleaseTexImage(Thread *thread, Display *display, Surface *eglSurface
ANGLE_EGL_TRY_RETURN(thread, eglSurface->releaseTexImage(thread->getContext(), buffer),
"eglReleaseTexImage", GetSurfaceIfValid(display, eglSurface),
EGL_FALSE);
ANGLE_CAPTURE_EGL(EGLReleaseTexImage, thread, display, eglSurface, buffer);
}
}
thread->setSuccess();

Просмотреть файл

@ -10,6 +10,7 @@
#include "libGLESv2/entry_points_egl_autogen.h"
#include "libANGLE/capture/capture_egl_autogen.h"
#include "libANGLE/entry_points_utils.h"
#include "libANGLE/validationEGL_autogen.h"
#include "libGLESv2/egl_ext_stubs_autogen.h"
@ -43,7 +44,11 @@ EGLBoolean EGLAPIENTRY EGL_ChooseConfig(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, ChooseConfig, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
attrib_listPacked, configs, config_size, num_config);
return ChooseConfig(thread, dpyPacked, attrib_listPacked, configs, config_size, num_config);
EGLBoolean returnValue =
ChooseConfig(thread, dpyPacked, attrib_listPacked, configs, config_size, num_config);
ANGLE_CAPTURE_EGL(ChooseConfig, true, thread, dpyPacked, attrib_listPacked, configs,
config_size, num_config, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_CopyBuffers(EGLDisplay dpy,
@ -65,7 +70,9 @@ EGLBoolean EGLAPIENTRY EGL_CopyBuffers(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, CopyBuffers, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
surfacePacked, target);
return CopyBuffers(thread, dpyPacked, surfacePacked, target);
EGLBoolean returnValue = CopyBuffers(thread, dpyPacked, surfacePacked, target);
ANGLE_CAPTURE_EGL(CopyBuffers, true, thread, dpyPacked, surfacePacked, target, returnValue);
return returnValue;
}
EGLContext EGLAPIENTRY EGL_CreateContext(EGLDisplay dpy,
@ -90,7 +97,11 @@ EGLContext EGLAPIENTRY EGL_CreateContext(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, CreateContext, GetDisplayIfValid(dpyPacked), EGLContext, dpyPacked,
configPacked, share_contextPacked, attrib_listPacked);
return CreateContext(thread, dpyPacked, configPacked, share_contextPacked, attrib_listPacked);
EGLContext returnValue =
CreateContext(thread, dpyPacked, configPacked, share_contextPacked, attrib_listPacked);
ANGLE_CAPTURE_EGL(CreateContext, true, thread, dpyPacked, configPacked, share_contextPacked,
attrib_listPacked, returnValue);
return returnValue;
}
EGLSurface EGLAPIENTRY EGL_CreatePbufferSurface(EGLDisplay dpy,
@ -113,7 +124,11 @@ EGLSurface EGLAPIENTRY EGL_CreatePbufferSurface(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, CreatePbufferSurface, GetDisplayIfValid(dpyPacked), EGLSurface,
dpyPacked, configPacked, attrib_listPacked);
return CreatePbufferSurface(thread, dpyPacked, configPacked, attrib_listPacked);
EGLSurface returnValue =
CreatePbufferSurface(thread, dpyPacked, configPacked, attrib_listPacked);
ANGLE_CAPTURE_EGL(CreatePbufferSurface, true, thread, dpyPacked, configPacked,
attrib_listPacked, returnValue);
return returnValue;
}
EGLSurface EGLAPIENTRY EGL_CreatePixmapSurface(EGLDisplay dpy,
@ -137,7 +152,11 @@ EGLSurface EGLAPIENTRY EGL_CreatePixmapSurface(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, CreatePixmapSurface, GetDisplayIfValid(dpyPacked), EGLSurface,
dpyPacked, configPacked, pixmap, attrib_listPacked);
return CreatePixmapSurface(thread, dpyPacked, configPacked, pixmap, attrib_listPacked);
EGLSurface returnValue =
CreatePixmapSurface(thread, dpyPacked, configPacked, pixmap, attrib_listPacked);
ANGLE_CAPTURE_EGL(CreatePixmapSurface, true, thread, dpyPacked, configPacked, pixmap,
attrib_listPacked, returnValue);
return returnValue;
}
EGLSurface EGLAPIENTRY EGL_CreateWindowSurface(EGLDisplay dpy,
@ -161,7 +180,11 @@ EGLSurface EGLAPIENTRY EGL_CreateWindowSurface(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, CreateWindowSurface, GetDisplayIfValid(dpyPacked), EGLSurface,
dpyPacked, configPacked, win, attrib_listPacked);
return CreateWindowSurface(thread, dpyPacked, configPacked, win, attrib_listPacked);
EGLSurface returnValue =
CreateWindowSurface(thread, dpyPacked, configPacked, win, attrib_listPacked);
ANGLE_CAPTURE_EGL(CreateWindowSurface, true, thread, dpyPacked, configPacked, win,
attrib_listPacked, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_DestroyContext(EGLDisplay dpy, EGLContext ctx)
@ -179,7 +202,9 @@ EGLBoolean EGLAPIENTRY EGL_DestroyContext(EGLDisplay dpy, EGLContext ctx)
ANGLE_EGL_VALIDATE(thread, DestroyContext, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
ctxPacked);
return DestroyContext(thread, dpyPacked, ctxPacked);
EGLBoolean returnValue = DestroyContext(thread, dpyPacked, ctxPacked);
ANGLE_CAPTURE_EGL(DestroyContext, true, thread, dpyPacked, ctxPacked, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_DestroySurface(EGLDisplay dpy, EGLSurface surface)
@ -198,7 +223,9 @@ EGLBoolean EGLAPIENTRY EGL_DestroySurface(EGLDisplay dpy, EGLSurface surface)
ANGLE_EGL_VALIDATE(thread, DestroySurface, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
surfacePacked);
return DestroySurface(thread, dpyPacked, surfacePacked);
EGLBoolean returnValue = DestroySurface(thread, dpyPacked, surfacePacked);
ANGLE_CAPTURE_EGL(DestroySurface, true, thread, dpyPacked, surfacePacked, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_GetConfigAttrib(EGLDisplay dpy,
@ -221,7 +248,10 @@ EGLBoolean EGLAPIENTRY EGL_GetConfigAttrib(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, GetConfigAttrib, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
configPacked, attribute, value);
return GetConfigAttrib(thread, dpyPacked, configPacked, attribute, value);
EGLBoolean returnValue = GetConfigAttrib(thread, dpyPacked, configPacked, attribute, value);
ANGLE_CAPTURE_EGL(GetConfigAttrib, true, thread, dpyPacked, configPacked, attribute, value,
returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_GetConfigs(EGLDisplay dpy,
@ -243,7 +273,10 @@ EGLBoolean EGLAPIENTRY EGL_GetConfigs(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, GetConfigs, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
configs, config_size, num_config);
return GetConfigs(thread, dpyPacked, configs, config_size, num_config);
EGLBoolean returnValue = GetConfigs(thread, dpyPacked, configs, config_size, num_config);
ANGLE_CAPTURE_EGL(GetConfigs, true, thread, dpyPacked, configs, config_size, num_config,
returnValue);
return returnValue;
}
EGLDisplay EGLAPIENTRY EGL_GetCurrentDisplay()
@ -256,7 +289,9 @@ EGLDisplay EGLAPIENTRY EGL_GetCurrentDisplay()
ANGLE_EGL_VALIDATE(thread, GetCurrentDisplay, nullptr, EGLDisplay);
return GetCurrentDisplay(thread);
EGLDisplay returnValue = GetCurrentDisplay(thread);
ANGLE_CAPTURE_EGL(GetCurrentDisplay, true, thread, returnValue);
return returnValue;
}
EGLSurface EGLAPIENTRY EGL_GetCurrentSurface(EGLint readdraw)
@ -269,7 +304,9 @@ EGLSurface EGLAPIENTRY EGL_GetCurrentSurface(EGLint readdraw)
ANGLE_EGL_VALIDATE(thread, GetCurrentSurface, nullptr, EGLSurface, readdraw);
return GetCurrentSurface(thread, readdraw);
EGLSurface returnValue = GetCurrentSurface(thread, readdraw);
ANGLE_CAPTURE_EGL(GetCurrentSurface, true, thread, readdraw, returnValue);
return returnValue;
}
EGLDisplay EGLAPIENTRY EGL_GetDisplay(EGLNativeDisplayType display_id)
@ -282,7 +319,9 @@ EGLDisplay EGLAPIENTRY EGL_GetDisplay(EGLNativeDisplayType display_id)
ANGLE_EGL_VALIDATE(thread, GetDisplay, nullptr, EGLDisplay, display_id);
return GetDisplay(thread, display_id);
EGLDisplay returnValue = GetDisplay(thread, display_id);
ANGLE_CAPTURE_EGL(GetDisplay, true, thread, display_id, returnValue);
return returnValue;
}
EGLint EGLAPIENTRY EGL_GetError()
@ -295,7 +334,9 @@ EGLint EGLAPIENTRY EGL_GetError()
ANGLE_EGL_VALIDATE(thread, GetError, nullptr, EGLint);
return GetError(thread);
EGLint returnValue = GetError(thread);
ANGLE_CAPTURE_EGL(GetError, true, thread, returnValue);
return returnValue;
}
__eglMustCastToProperFunctionPointerType EGLAPIENTRY EGL_GetProcAddress(const char *procname)
@ -309,7 +350,9 @@ __eglMustCastToProperFunctionPointerType EGLAPIENTRY EGL_GetProcAddress(const ch
ANGLE_EGL_VALIDATE(thread, GetProcAddress, nullptr, __eglMustCastToProperFunctionPointerType,
procname);
return GetProcAddress(thread, procname);
__eglMustCastToProperFunctionPointerType returnValue = GetProcAddress(thread, procname);
ANGLE_CAPTURE_EGL(GetProcAddress, true, thread, procname, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_Initialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
@ -327,7 +370,9 @@ EGLBoolean EGLAPIENTRY EGL_Initialize(EGLDisplay dpy, EGLint *major, EGLint *min
ANGLE_EGL_VALIDATE(thread, Initialize, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
major, minor);
return Initialize(thread, dpyPacked, major, minor);
EGLBoolean returnValue = Initialize(thread, dpyPacked, major, minor);
ANGLE_CAPTURE_EGL(Initialize, true, thread, dpyPacked, major, minor, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_MakeCurrent(EGLDisplay dpy,
@ -353,7 +398,10 @@ EGLBoolean EGLAPIENTRY EGL_MakeCurrent(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, MakeCurrent, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
drawPacked, readPacked, ctxPacked);
return MakeCurrent(thread, dpyPacked, drawPacked, readPacked, ctxPacked);
EGLBoolean returnValue = MakeCurrent(thread, dpyPacked, drawPacked, readPacked, ctxPacked);
ANGLE_CAPTURE_EGL(MakeCurrent, true, thread, dpyPacked, drawPacked, readPacked, ctxPacked,
returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_QueryContext(EGLDisplay dpy,
@ -376,7 +424,10 @@ EGLBoolean EGLAPIENTRY EGL_QueryContext(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, QueryContext, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
ctxPacked, attribute, value);
return QueryContext(thread, dpyPacked, ctxPacked, attribute, value);
EGLBoolean returnValue = QueryContext(thread, dpyPacked, ctxPacked, attribute, value);
ANGLE_CAPTURE_EGL(QueryContext, true, thread, dpyPacked, ctxPacked, attribute, value,
returnValue);
return returnValue;
}
const char *EGLAPIENTRY EGL_QueryString(EGLDisplay dpy, EGLint name)
@ -392,7 +443,9 @@ const char *EGLAPIENTRY EGL_QueryString(EGLDisplay dpy, EGLint name)
ANGLE_EGL_VALIDATE(thread, QueryString, GetDisplayIfValid(dpyPacked), const char *, dpyPacked,
name);
return QueryString(thread, dpyPacked, name);
const char *returnValue = QueryString(thread, dpyPacked, name);
ANGLE_CAPTURE_EGL(QueryString, true, thread, dpyPacked, name, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_QuerySurface(EGLDisplay dpy,
@ -416,7 +469,10 @@ EGLBoolean EGLAPIENTRY EGL_QuerySurface(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, QuerySurface, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
surfacePacked, attribute, value);
return QuerySurface(thread, dpyPacked, surfacePacked, attribute, value);
EGLBoolean returnValue = QuerySurface(thread, dpyPacked, surfacePacked, attribute, value);
ANGLE_CAPTURE_EGL(QuerySurface, true, thread, dpyPacked, surfacePacked, attribute, value,
returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_SwapBuffers(EGLDisplay dpy, EGLSurface surface)
@ -435,7 +491,9 @@ EGLBoolean EGLAPIENTRY EGL_SwapBuffers(EGLDisplay dpy, EGLSurface surface)
ANGLE_EGL_VALIDATE(thread, SwapBuffers, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
surfacePacked);
return SwapBuffers(thread, dpyPacked, surfacePacked);
EGLBoolean returnValue = SwapBuffers(thread, dpyPacked, surfacePacked);
ANGLE_CAPTURE_EGL(SwapBuffers, true, thread, dpyPacked, surfacePacked, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_Terminate(EGLDisplay dpy)
@ -450,7 +508,9 @@ EGLBoolean EGLAPIENTRY EGL_Terminate(EGLDisplay dpy)
ANGLE_EGL_VALIDATE(thread, Terminate, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked);
return Terminate(thread, dpyPacked);
EGLBoolean returnValue = Terminate(thread, dpyPacked);
ANGLE_CAPTURE_EGL(Terminate, true, thread, dpyPacked, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_WaitGL()
@ -463,7 +523,9 @@ EGLBoolean EGLAPIENTRY EGL_WaitGL()
ANGLE_EGL_VALIDATE(thread, WaitGL, nullptr, EGLBoolean);
return WaitGL(thread);
EGLBoolean returnValue = WaitGL(thread);
ANGLE_CAPTURE_EGL(WaitGL, true, thread, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_WaitNative(EGLint engine)
@ -476,7 +538,9 @@ EGLBoolean EGLAPIENTRY EGL_WaitNative(EGLint engine)
ANGLE_EGL_VALIDATE(thread, WaitNative, nullptr, EGLBoolean, engine);
return WaitNative(thread, engine);
EGLBoolean returnValue = WaitNative(thread, engine);
ANGLE_CAPTURE_EGL(WaitNative, true, thread, engine, returnValue);
return returnValue;
}
// EGL 1.1
@ -496,7 +560,9 @@ EGLBoolean EGLAPIENTRY EGL_BindTexImage(EGLDisplay dpy, EGLSurface surface, EGLi
ANGLE_EGL_VALIDATE(thread, BindTexImage, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
surfacePacked, buffer);
return BindTexImage(thread, dpyPacked, surfacePacked, buffer);
EGLBoolean returnValue = BindTexImage(thread, dpyPacked, surfacePacked, buffer);
ANGLE_CAPTURE_EGL(BindTexImage, true, thread, dpyPacked, surfacePacked, buffer, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_ReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer)
@ -515,7 +581,9 @@ EGLBoolean EGLAPIENTRY EGL_ReleaseTexImage(EGLDisplay dpy, EGLSurface surface, E
ANGLE_EGL_VALIDATE(thread, ReleaseTexImage, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
surfacePacked, buffer);
return ReleaseTexImage(thread, dpyPacked, surfacePacked, buffer);
EGLBoolean returnValue = ReleaseTexImage(thread, dpyPacked, surfacePacked, buffer);
ANGLE_CAPTURE_EGL(ReleaseTexImage, true, thread, dpyPacked, surfacePacked, buffer, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_SurfaceAttrib(EGLDisplay dpy,
@ -538,7 +606,10 @@ EGLBoolean EGLAPIENTRY EGL_SurfaceAttrib(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, SurfaceAttrib, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
surfacePacked, attribute, value);
return SurfaceAttrib(thread, dpyPacked, surfacePacked, attribute, value);
EGLBoolean returnValue = SurfaceAttrib(thread, dpyPacked, surfacePacked, attribute, value);
ANGLE_CAPTURE_EGL(SurfaceAttrib, true, thread, dpyPacked, surfacePacked, attribute, value,
returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_SwapInterval(EGLDisplay dpy, EGLint interval)
@ -554,7 +625,9 @@ EGLBoolean EGLAPIENTRY EGL_SwapInterval(EGLDisplay dpy, EGLint interval)
ANGLE_EGL_VALIDATE(thread, SwapInterval, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
interval);
return SwapInterval(thread, dpyPacked, interval);
EGLBoolean returnValue = SwapInterval(thread, dpyPacked, interval);
ANGLE_CAPTURE_EGL(SwapInterval, true, thread, dpyPacked, interval, returnValue);
return returnValue;
}
// EGL 1.2
@ -568,7 +641,9 @@ EGLBoolean EGLAPIENTRY EGL_BindAPI(EGLenum api)
ANGLE_EGL_VALIDATE(thread, BindAPI, nullptr, EGLBoolean, api);
return BindAPI(thread, api);
EGLBoolean returnValue = BindAPI(thread, api);
ANGLE_CAPTURE_EGL(BindAPI, true, thread, api, returnValue);
return returnValue;
}
EGLSurface EGLAPIENTRY EGL_CreatePbufferFromClientBuffer(EGLDisplay dpy,
@ -594,8 +669,11 @@ EGLSurface EGLAPIENTRY EGL_CreatePbufferFromClientBuffer(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, CreatePbufferFromClientBuffer, GetDisplayIfValid(dpyPacked),
EGLSurface, dpyPacked, buftype, buffer, configPacked, attrib_listPacked);
return CreatePbufferFromClientBuffer(thread, dpyPacked, buftype, buffer, configPacked,
attrib_listPacked);
EGLSurface returnValue = CreatePbufferFromClientBuffer(thread, dpyPacked, buftype, buffer,
configPacked, attrib_listPacked);
ANGLE_CAPTURE_EGL(CreatePbufferFromClientBuffer, true, thread, dpyPacked, buftype, buffer,
configPacked, attrib_listPacked, returnValue);
return returnValue;
}
EGLenum EGLAPIENTRY EGL_QueryAPI()
@ -608,7 +686,9 @@ EGLenum EGLAPIENTRY EGL_QueryAPI()
ANGLE_EGL_VALIDATE(thread, QueryAPI, nullptr, EGLenum);
return QueryAPI(thread);
EGLenum returnValue = QueryAPI(thread);
ANGLE_CAPTURE_EGL(QueryAPI, true, thread, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_ReleaseThread()
@ -621,7 +701,9 @@ EGLBoolean EGLAPIENTRY EGL_ReleaseThread()
ANGLE_EGL_VALIDATE(thread, ReleaseThread, nullptr, EGLBoolean);
return ReleaseThread(thread);
EGLBoolean returnValue = ReleaseThread(thread);
ANGLE_CAPTURE_EGL(ReleaseThread, true, thread, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_WaitClient()
@ -634,7 +716,9 @@ EGLBoolean EGLAPIENTRY EGL_WaitClient()
ANGLE_EGL_VALIDATE(thread, WaitClient, nullptr, EGLBoolean);
return WaitClient(thread);
EGLBoolean returnValue = WaitClient(thread);
ANGLE_CAPTURE_EGL(WaitClient, true, thread, returnValue);
return returnValue;
}
// EGL 1.4
@ -648,7 +732,9 @@ EGLContext EGLAPIENTRY EGL_GetCurrentContext()
ANGLE_EGL_VALIDATE(thread, GetCurrentContext, nullptr, EGLContext);
return GetCurrentContext(thread);
EGLContext returnValue = GetCurrentContext(thread);
ANGLE_CAPTURE_EGL(GetCurrentContext, true, thread, returnValue);
return returnValue;
}
// EGL 1.5
@ -668,7 +754,10 @@ EGLint EGLAPIENTRY EGL_ClientWaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags
ANGLE_EGL_VALIDATE(thread, ClientWaitSync, GetDisplayIfValid(dpyPacked), EGLint, dpyPacked,
syncPacked, flags, timeout);
return ClientWaitSync(thread, dpyPacked, syncPacked, flags, timeout);
EGLint returnValue = ClientWaitSync(thread, dpyPacked, syncPacked, flags, timeout);
ANGLE_CAPTURE_EGL(ClientWaitSync, true, thread, dpyPacked, syncPacked, flags, timeout,
returnValue);
return returnValue;
}
EGLImage EGLAPIENTRY EGL_CreateImage(EGLDisplay dpy,
@ -693,7 +782,11 @@ EGLImage EGLAPIENTRY EGL_CreateImage(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, CreateImage, GetDisplayIfValid(dpyPacked), EGLImage, dpyPacked,
ctxPacked, target, buffer, attrib_listPacked);
return CreateImage(thread, dpyPacked, ctxPacked, target, buffer, attrib_listPacked);
EGLImage returnValue =
CreateImage(thread, dpyPacked, ctxPacked, target, buffer, attrib_listPacked);
ANGLE_CAPTURE_EGL(CreateImage, true, thread, dpyPacked, ctxPacked, target, buffer,
attrib_listPacked, returnValue);
return returnValue;
}
EGLSurface EGLAPIENTRY EGL_CreatePlatformPixmapSurface(EGLDisplay dpy,
@ -717,8 +810,11 @@ EGLSurface EGLAPIENTRY EGL_CreatePlatformPixmapSurface(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, CreatePlatformPixmapSurface, GetDisplayIfValid(dpyPacked),
EGLSurface, dpyPacked, configPacked, native_pixmap, attrib_listPacked);
return CreatePlatformPixmapSurface(thread, dpyPacked, configPacked, native_pixmap,
attrib_listPacked);
EGLSurface returnValue = CreatePlatformPixmapSurface(thread, dpyPacked, configPacked,
native_pixmap, attrib_listPacked);
ANGLE_CAPTURE_EGL(CreatePlatformPixmapSurface, true, thread, dpyPacked, configPacked,
native_pixmap, attrib_listPacked, returnValue);
return returnValue;
}
EGLSurface EGLAPIENTRY EGL_CreatePlatformWindowSurface(EGLDisplay dpy,
@ -742,8 +838,11 @@ EGLSurface EGLAPIENTRY EGL_CreatePlatformWindowSurface(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, CreatePlatformWindowSurface, GetDisplayIfValid(dpyPacked),
EGLSurface, dpyPacked, configPacked, native_window, attrib_listPacked);
return CreatePlatformWindowSurface(thread, dpyPacked, configPacked, native_window,
attrib_listPacked);
EGLSurface returnValue = CreatePlatformWindowSurface(thread, dpyPacked, configPacked,
native_window, attrib_listPacked);
ANGLE_CAPTURE_EGL(CreatePlatformWindowSurface, true, thread, dpyPacked, configPacked,
native_window, attrib_listPacked, returnValue);
return returnValue;
}
EGLSync EGLAPIENTRY EGL_CreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list)
@ -761,7 +860,9 @@ EGLSync EGLAPIENTRY EGL_CreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib
ANGLE_EGL_VALIDATE(thread, CreateSync, GetDisplayIfValid(dpyPacked), EGLSync, dpyPacked, type,
attrib_listPacked);
return CreateSync(thread, dpyPacked, type, attrib_listPacked);
EGLSync returnValue = CreateSync(thread, dpyPacked, type, attrib_listPacked);
ANGLE_CAPTURE_EGL(CreateSync, true, thread, dpyPacked, type, attrib_listPacked, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_DestroyImage(EGLDisplay dpy, EGLImage image)
@ -779,7 +880,9 @@ EGLBoolean EGLAPIENTRY EGL_DestroyImage(EGLDisplay dpy, EGLImage image)
ANGLE_EGL_VALIDATE(thread, DestroyImage, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
imagePacked);
return DestroyImage(thread, dpyPacked, imagePacked);
EGLBoolean returnValue = DestroyImage(thread, dpyPacked, imagePacked);
ANGLE_CAPTURE_EGL(DestroyImage, true, thread, dpyPacked, imagePacked, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_DestroySync(EGLDisplay dpy, EGLSync sync)
@ -797,7 +900,9 @@ EGLBoolean EGLAPIENTRY EGL_DestroySync(EGLDisplay dpy, EGLSync sync)
ANGLE_EGL_VALIDATE(thread, DestroySync, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
syncPacked);
return DestroySync(thread, dpyPacked, syncPacked);
EGLBoolean returnValue = DestroySync(thread, dpyPacked, syncPacked);
ANGLE_CAPTURE_EGL(DestroySync, true, thread, dpyPacked, syncPacked, returnValue);
return returnValue;
}
EGLDisplay EGLAPIENTRY EGL_GetPlatformDisplay(EGLenum platform,
@ -818,7 +923,11 @@ EGLDisplay EGLAPIENTRY EGL_GetPlatformDisplay(EGLenum platform,
ANGLE_EGL_VALIDATE(thread, GetPlatformDisplay, nullptr, EGLDisplay, platform, native_display,
attrib_listPacked);
return GetPlatformDisplay(thread, platform, native_display, attrib_listPacked);
EGLDisplay returnValue =
GetPlatformDisplay(thread, platform, native_display, attrib_listPacked);
ANGLE_CAPTURE_EGL(GetPlatformDisplay, true, thread, platform, native_display, attrib_listPacked,
returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_GetSyncAttrib(EGLDisplay dpy,
@ -841,7 +950,10 @@ EGLBoolean EGLAPIENTRY EGL_GetSyncAttrib(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, GetSyncAttrib, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
syncPacked, attribute, value);
return GetSyncAttrib(thread, dpyPacked, syncPacked, attribute, value);
EGLBoolean returnValue = GetSyncAttrib(thread, dpyPacked, syncPacked, attribute, value);
ANGLE_CAPTURE_EGL(GetSyncAttrib, true, thread, dpyPacked, syncPacked, attribute, value,
returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_WaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags)
@ -859,7 +971,9 @@ EGLBoolean EGLAPIENTRY EGL_WaitSync(EGLDisplay dpy, EGLSync sync, EGLint flags)
ANGLE_EGL_VALIDATE(thread, WaitSync, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
syncPacked, flags);
return WaitSync(thread, dpyPacked, syncPacked, flags);
EGLBoolean returnValue = WaitSync(thread, dpyPacked, syncPacked, flags);
ANGLE_CAPTURE_EGL(WaitSync, true, thread, dpyPacked, syncPacked, flags, returnValue);
return returnValue;
}
} // extern "C"

Просмотреть файл

@ -10,6 +10,7 @@
#include "libGLESv2/entry_points_egl_ext_autogen.h"
#include "libANGLE/capture/capture_egl_autogen.h"
#include "libANGLE/entry_points_utils.h"
#include "libANGLE/validationEGL_autogen.h"
#include "libGLESv2/egl_ext_stubs_autogen.h"
@ -38,6 +39,7 @@ void EGLAPIENTRY EGL_SetBlobCacheFuncsANDROID(EGLDisplay dpy,
dpyPacked, set, get);
SetBlobCacheFuncsANDROID(thread, dpyPacked, set, get);
ANGLE_CAPTURE_EGL(SetBlobCacheFuncsANDROID, true, thread, dpyPacked, set, get);
}
// EGL_ANDROID_create_native_client_buffer
@ -55,7 +57,10 @@ EGLClientBuffer EGLAPIENTRY EGL_CreateNativeClientBufferANDROID(const EGLint *at
ANGLE_EGL_VALIDATE(thread, CreateNativeClientBufferANDROID, nullptr, EGLClientBuffer,
attrib_listPacked);
return CreateNativeClientBufferANDROID(thread, attrib_listPacked);
EGLClientBuffer returnValue = CreateNativeClientBufferANDROID(thread, attrib_listPacked);
ANGLE_CAPTURE_EGL(CreateNativeClientBufferANDROID, true, thread, attrib_listPacked,
returnValue);
return returnValue;
}
// EGL_ANDROID_get_frame_timestamps
@ -79,7 +84,11 @@ EGLBoolean EGLAPIENTRY EGL_GetCompositorTimingSupportedANDROID(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, GetCompositorTimingSupportedANDROID, GetDisplayIfValid(dpyPacked),
EGLBoolean, dpyPacked, surfacePacked, namePacked);
return GetCompositorTimingSupportedANDROID(thread, dpyPacked, surfacePacked, namePacked);
EGLBoolean returnValue =
GetCompositorTimingSupportedANDROID(thread, dpyPacked, surfacePacked, namePacked);
ANGLE_CAPTURE_EGL(GetCompositorTimingSupportedANDROID, true, thread, dpyPacked, surfacePacked,
namePacked, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_GetCompositorTimingANDROID(EGLDisplay dpy,
@ -105,8 +114,11 @@ EGLBoolean EGLAPIENTRY EGL_GetCompositorTimingANDROID(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, GetCompositorTimingANDROID, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, surfacePacked, numTimestamps, names, values);
return GetCompositorTimingANDROID(thread, dpyPacked, surfacePacked, numTimestamps, names,
values);
EGLBoolean returnValue =
GetCompositorTimingANDROID(thread, dpyPacked, surfacePacked, numTimestamps, names, values);
ANGLE_CAPTURE_EGL(GetCompositorTimingANDROID, true, thread, dpyPacked, surfacePacked,
numTimestamps, names, values, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_GetNextFrameIdANDROID(EGLDisplay dpy,
@ -128,7 +140,10 @@ EGLBoolean EGLAPIENTRY EGL_GetNextFrameIdANDROID(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, GetNextFrameIdANDROID, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, surfacePacked, frameId);
return GetNextFrameIdANDROID(thread, dpyPacked, surfacePacked, frameId);
EGLBoolean returnValue = GetNextFrameIdANDROID(thread, dpyPacked, surfacePacked, frameId);
ANGLE_CAPTURE_EGL(GetNextFrameIdANDROID, true, thread, dpyPacked, surfacePacked, frameId,
returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_GetFrameTimestampSupportedANDROID(EGLDisplay dpy,
@ -151,7 +166,11 @@ EGLBoolean EGLAPIENTRY EGL_GetFrameTimestampSupportedANDROID(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, GetFrameTimestampSupportedANDROID, GetDisplayIfValid(dpyPacked),
EGLBoolean, dpyPacked, surfacePacked, timestampPacked);
return GetFrameTimestampSupportedANDROID(thread, dpyPacked, surfacePacked, timestampPacked);
EGLBoolean returnValue =
GetFrameTimestampSupportedANDROID(thread, dpyPacked, surfacePacked, timestampPacked);
ANGLE_CAPTURE_EGL(GetFrameTimestampSupportedANDROID, true, thread, dpyPacked, surfacePacked,
timestampPacked, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_GetFrameTimestampsANDROID(EGLDisplay dpy,
@ -179,8 +198,11 @@ EGLBoolean EGLAPIENTRY EGL_GetFrameTimestampsANDROID(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, GetFrameTimestampsANDROID, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, surfacePacked, frameId, numTimestamps, timestamps, values);
return GetFrameTimestampsANDROID(thread, dpyPacked, surfacePacked, frameId, numTimestamps,
timestamps, values);
EGLBoolean returnValue = GetFrameTimestampsANDROID(thread, dpyPacked, surfacePacked, frameId,
numTimestamps, timestamps, values);
ANGLE_CAPTURE_EGL(GetFrameTimestampsANDROID, true, thread, dpyPacked, surfacePacked, frameId,
numTimestamps, timestamps, values, returnValue);
return returnValue;
}
// EGL_ANDROID_get_native_client_buffer
@ -194,7 +216,9 @@ EGLClientBuffer EGLAPIENTRY EGL_GetNativeClientBufferANDROID(const struct AHardw
ANGLE_EGL_VALIDATE(thread, GetNativeClientBufferANDROID, nullptr, EGLClientBuffer, buffer);
return GetNativeClientBufferANDROID(thread, buffer);
EGLClientBuffer returnValue = GetNativeClientBufferANDROID(thread, buffer);
ANGLE_CAPTURE_EGL(GetNativeClientBufferANDROID, true, thread, buffer, returnValue);
return returnValue;
}
// EGL_ANDROID_native_fence_sync
@ -213,7 +237,9 @@ EGLint EGLAPIENTRY EGL_DupNativeFenceFDANDROID(EGLDisplay dpy, EGLSyncKHR sync)
ANGLE_EGL_VALIDATE(thread, DupNativeFenceFDANDROID, GetDisplayIfValid(dpyPacked), EGLint,
dpyPacked, syncPacked);
return DupNativeFenceFDANDROID(thread, dpyPacked, syncPacked);
EGLint returnValue = DupNativeFenceFDANDROID(thread, dpyPacked, syncPacked);
ANGLE_CAPTURE_EGL(DupNativeFenceFDANDROID, true, thread, dpyPacked, syncPacked, returnValue);
return returnValue;
}
// EGL_ANDROID_presentation_time
@ -236,7 +262,10 @@ EGLBoolean EGLAPIENTRY EGL_PresentationTimeANDROID(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, PresentationTimeANDROID, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, surfacePacked, time);
return PresentationTimeANDROID(thread, dpyPacked, surfacePacked, time);
EGLBoolean returnValue = PresentationTimeANDROID(thread, dpyPacked, surfacePacked, time);
ANGLE_CAPTURE_EGL(PresentationTimeANDROID, true, thread, dpyPacked, surfacePacked, time,
returnValue);
return returnValue;
}
// EGL_ANGLE_device_creation
@ -256,7 +285,10 @@ EGLDeviceEXT EGLAPIENTRY EGL_CreateDeviceANGLE(EGLint device_type,
ANGLE_EGL_VALIDATE(thread, CreateDeviceANGLE, nullptr, EGLDeviceEXT, device_type, native_device,
attrib_list);
return CreateDeviceANGLE(thread, device_type, native_device, attrib_list);
EGLDeviceEXT returnValue = CreateDeviceANGLE(thread, device_type, native_device, attrib_list);
ANGLE_CAPTURE_EGL(CreateDeviceANGLE, true, thread, device_type, native_device, attrib_list,
returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_ReleaseDeviceANGLE(EGLDeviceEXT device)
@ -271,7 +303,9 @@ EGLBoolean EGLAPIENTRY EGL_ReleaseDeviceANGLE(EGLDeviceEXT device)
ANGLE_EGL_VALIDATE(thread, ReleaseDeviceANGLE, nullptr, EGLBoolean, devicePacked);
return ReleaseDeviceANGLE(thread, devicePacked);
EGLBoolean returnValue = ReleaseDeviceANGLE(thread, devicePacked);
ANGLE_CAPTURE_EGL(ReleaseDeviceANGLE, true, thread, devicePacked, returnValue);
return returnValue;
}
// EGL_ANGLE_feature_control
@ -289,7 +323,9 @@ const char *EGLAPIENTRY EGL_QueryStringiANGLE(EGLDisplay dpy, EGLint name, EGLin
ANGLE_EGL_VALIDATE(thread, QueryStringiANGLE, GetDisplayIfValid(dpyPacked), const char *,
dpyPacked, name, index);
return QueryStringiANGLE(thread, dpyPacked, name, index);
const char *returnValue = QueryStringiANGLE(thread, dpyPacked, name, index);
ANGLE_CAPTURE_EGL(QueryStringiANGLE, true, thread, dpyPacked, name, index, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_QueryDisplayAttribANGLE(EGLDisplay dpy,
@ -309,7 +345,10 @@ EGLBoolean EGLAPIENTRY EGL_QueryDisplayAttribANGLE(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, QueryDisplayAttribANGLE, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, attribute, value);
return QueryDisplayAttribANGLE(thread, dpyPacked, attribute, value);
EGLBoolean returnValue = QueryDisplayAttribANGLE(thread, dpyPacked, attribute, value);
ANGLE_CAPTURE_EGL(QueryDisplayAttribANGLE, true, thread, dpyPacked, attribute, value,
returnValue);
return returnValue;
}
// EGL_ANGLE_metal_shared_event_sync
@ -328,7 +367,9 @@ void *EGLAPIENTRY EGL_CopyMetalSharedEventANGLE(EGLDisplay dpy, EGLSyncKHR sync)
ANGLE_EGL_VALIDATE(thread, CopyMetalSharedEventANGLE, GetDisplayIfValid(dpyPacked), void *,
dpyPacked, syncPacked);
return CopyMetalSharedEventANGLE(thread, dpyPacked, syncPacked);
void *returnValue = CopyMetalSharedEventANGLE(thread, dpyPacked, syncPacked);
ANGLE_CAPTURE_EGL(CopyMetalSharedEventANGLE, true, thread, dpyPacked, syncPacked, returnValue);
return returnValue;
}
// EGL_ANGLE_power_preference
@ -348,6 +389,7 @@ void EGLAPIENTRY EGL_ReleaseHighPowerGPUANGLE(EGLDisplay dpy, EGLContext ctx)
dpyPacked, ctxPacked);
ReleaseHighPowerGPUANGLE(thread, dpyPacked, ctxPacked);
ANGLE_CAPTURE_EGL(ReleaseHighPowerGPUANGLE, true, thread, dpyPacked, ctxPacked);
}
void EGLAPIENTRY EGL_ReacquireHighPowerGPUANGLE(EGLDisplay dpy, EGLContext ctx)
@ -366,6 +408,7 @@ void EGLAPIENTRY EGL_ReacquireHighPowerGPUANGLE(EGLDisplay dpy, EGLContext ctx)
dpyPacked, ctxPacked);
ReacquireHighPowerGPUANGLE(thread, dpyPacked, ctxPacked);
ANGLE_CAPTURE_EGL(ReacquireHighPowerGPUANGLE, true, thread, dpyPacked, ctxPacked);
}
void EGLAPIENTRY EGL_HandleGPUSwitchANGLE(EGLDisplay dpy)
@ -381,6 +424,7 @@ void EGLAPIENTRY EGL_HandleGPUSwitchANGLE(EGLDisplay dpy)
ANGLE_EGL_VALIDATE_VOID(thread, HandleGPUSwitchANGLE, GetDisplayIfValid(dpyPacked), dpyPacked);
HandleGPUSwitchANGLE(thread, dpyPacked);
ANGLE_CAPTURE_EGL(HandleGPUSwitchANGLE, true, thread, dpyPacked);
}
void EGLAPIENTRY EGL_ForceGPUSwitchANGLE(EGLDisplay dpy, EGLint gpuIDHigh, EGLint gpuIDLow)
@ -398,6 +442,7 @@ void EGLAPIENTRY EGL_ForceGPUSwitchANGLE(EGLDisplay dpy, EGLint gpuIDHigh, EGLin
gpuIDHigh, gpuIDLow);
ForceGPUSwitchANGLE(thread, dpyPacked, gpuIDHigh, gpuIDLow);
ANGLE_CAPTURE_EGL(ForceGPUSwitchANGLE, true, thread, dpyPacked, gpuIDHigh, gpuIDLow);
}
// EGL_ANGLE_prepare_swap_buffers
@ -421,7 +466,9 @@ EGLint EGLAPIENTRY EGL_ProgramCacheGetAttribANGLE(EGLDisplay dpy, EGLenum attrib
ANGLE_EGL_VALIDATE(thread, ProgramCacheGetAttribANGLE, GetDisplayIfValid(dpyPacked), EGLint,
dpyPacked, attrib);
return ProgramCacheGetAttribANGLE(thread, dpyPacked, attrib);
EGLint returnValue = ProgramCacheGetAttribANGLE(thread, dpyPacked, attrib);
ANGLE_CAPTURE_EGL(ProgramCacheGetAttribANGLE, true, thread, dpyPacked, attrib, returnValue);
return returnValue;
}
void EGLAPIENTRY EGL_ProgramCacheQueryANGLE(EGLDisplay dpy,
@ -448,6 +495,8 @@ void EGLAPIENTRY EGL_ProgramCacheQueryANGLE(EGLDisplay dpy,
index, key, keysize, binary, binarysize);
ProgramCacheQueryANGLE(thread, dpyPacked, index, key, keysize, binary, binarysize);
ANGLE_CAPTURE_EGL(ProgramCacheQueryANGLE, true, thread, dpyPacked, index, key, keysize, binary,
binarysize);
}
void EGLAPIENTRY EGL_ProgramCachePopulateANGLE(EGLDisplay dpy,
@ -471,6 +520,8 @@ void EGLAPIENTRY EGL_ProgramCachePopulateANGLE(EGLDisplay dpy,
dpyPacked, key, keysize, binary, binarysize);
ProgramCachePopulateANGLE(thread, dpyPacked, key, keysize, binary, binarysize);
ANGLE_CAPTURE_EGL(ProgramCachePopulateANGLE, true, thread, dpyPacked, key, keysize, binary,
binarysize);
}
EGLint EGLAPIENTRY EGL_ProgramCacheResizeANGLE(EGLDisplay dpy, EGLint limit, EGLint mode)
@ -487,7 +538,9 @@ EGLint EGLAPIENTRY EGL_ProgramCacheResizeANGLE(EGLDisplay dpy, EGLint limit, EGL
ANGLE_EGL_VALIDATE(thread, ProgramCacheResizeANGLE, GetDisplayIfValid(dpyPacked), EGLint,
dpyPacked, limit, mode);
return ProgramCacheResizeANGLE(thread, dpyPacked, limit, mode);
EGLint returnValue = ProgramCacheResizeANGLE(thread, dpyPacked, limit, mode);
ANGLE_CAPTURE_EGL(ProgramCacheResizeANGLE, true, thread, dpyPacked, limit, mode, returnValue);
return returnValue;
}
// EGL_ANGLE_query_surface_pointer
@ -512,7 +565,11 @@ EGLBoolean EGLAPIENTRY EGL_QuerySurfacePointerANGLE(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, QuerySurfacePointerANGLE, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, surfacePacked, attribute, value);
return QuerySurfacePointerANGLE(thread, dpyPacked, surfacePacked, attribute, value);
EGLBoolean returnValue =
QuerySurfacePointerANGLE(thread, dpyPacked, surfacePacked, attribute, value);
ANGLE_CAPTURE_EGL(QuerySurfacePointerANGLE, true, thread, dpyPacked, surfacePacked, attribute,
value, returnValue);
return returnValue;
}
// EGL_ANGLE_stream_producer_d3d_texture
@ -536,7 +593,11 @@ EGLBoolean EGLAPIENTRY EGL_CreateStreamProducerD3DTextureANGLE(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, CreateStreamProducerD3DTextureANGLE, GetDisplayIfValid(dpyPacked),
EGLBoolean, dpyPacked, streamPacked, attrib_listPacked);
return CreateStreamProducerD3DTextureANGLE(thread, dpyPacked, streamPacked, attrib_listPacked);
EGLBoolean returnValue =
CreateStreamProducerD3DTextureANGLE(thread, dpyPacked, streamPacked, attrib_listPacked);
ANGLE_CAPTURE_EGL(CreateStreamProducerD3DTextureANGLE, true, thread, dpyPacked, streamPacked,
attrib_listPacked, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_StreamPostD3DTextureANGLE(EGLDisplay dpy,
@ -560,7 +621,11 @@ EGLBoolean EGLAPIENTRY EGL_StreamPostD3DTextureANGLE(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, StreamPostD3DTextureANGLE, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, streamPacked, texture, attrib_listPacked);
return StreamPostD3DTextureANGLE(thread, dpyPacked, streamPacked, texture, attrib_listPacked);
EGLBoolean returnValue =
StreamPostD3DTextureANGLE(thread, dpyPacked, streamPacked, texture, attrib_listPacked);
ANGLE_CAPTURE_EGL(StreamPostD3DTextureANGLE, true, thread, dpyPacked, streamPacked, texture,
attrib_listPacked, returnValue);
return returnValue;
}
// EGL_ANGLE_swap_with_frame_token
@ -583,7 +648,11 @@ EGLBoolean EGLAPIENTRY EGL_SwapBuffersWithFrameTokenANGLE(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, SwapBuffersWithFrameTokenANGLE, GetDisplayIfValid(dpyPacked),
EGLBoolean, dpyPacked, surfacePacked, frametoken);
return SwapBuffersWithFrameTokenANGLE(thread, dpyPacked, surfacePacked, frametoken);
EGLBoolean returnValue =
SwapBuffersWithFrameTokenANGLE(thread, dpyPacked, surfacePacked, frametoken);
ANGLE_CAPTURE_EGL(SwapBuffersWithFrameTokenANGLE, true, thread, dpyPacked, surfacePacked,
frametoken, returnValue);
return returnValue;
}
// EGL_ANGLE_sync_control_rate
@ -608,7 +677,11 @@ EGLBoolean EGLAPIENTRY EGL_GetMscRateANGLE(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, GetMscRateANGLE, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
surfacePacked, numerator, denominator);
return GetMscRateANGLE(thread, dpyPacked, surfacePacked, numerator, denominator);
EGLBoolean returnValue =
GetMscRateANGLE(thread, dpyPacked, surfacePacked, numerator, denominator);
ANGLE_CAPTURE_EGL(GetMscRateANGLE, true, thread, dpyPacked, surfacePacked, numerator,
denominator, returnValue);
return returnValue;
}
// EGL_ANGLE_vulkan_image
@ -633,7 +706,11 @@ EGLBoolean EGLAPIENTRY EGL_ExportVkImageANGLE(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, ExportVkImageANGLE, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, imagePacked, vk_image, vk_image_create_info);
return ExportVkImageANGLE(thread, dpyPacked, imagePacked, vk_image, vk_image_create_info);
EGLBoolean returnValue =
ExportVkImageANGLE(thread, dpyPacked, imagePacked, vk_image, vk_image_create_info);
ANGLE_CAPTURE_EGL(ExportVkImageANGLE, true, thread, dpyPacked, imagePacked, vk_image,
vk_image_create_info, returnValue);
return returnValue;
}
// EGL_CHROMIUM_sync_control
@ -659,7 +736,10 @@ EGLBoolean EGLAPIENTRY EGL_GetSyncValuesCHROMIUM(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, GetSyncValuesCHROMIUM, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, surfacePacked, ust, msc, sbc);
return GetSyncValuesCHROMIUM(thread, dpyPacked, surfacePacked, ust, msc, sbc);
EGLBoolean returnValue = GetSyncValuesCHROMIUM(thread, dpyPacked, surfacePacked, ust, msc, sbc);
ANGLE_CAPTURE_EGL(GetSyncValuesCHROMIUM, true, thread, dpyPacked, surfacePacked, ust, msc, sbc,
returnValue);
return returnValue;
}
// EGL_EXT_device_query
@ -680,7 +760,10 @@ EGLBoolean EGLAPIENTRY EGL_QueryDeviceAttribEXT(EGLDeviceEXT device,
ANGLE_EGL_VALIDATE(thread, QueryDeviceAttribEXT, nullptr, EGLBoolean, devicePacked, attribute,
value);
return QueryDeviceAttribEXT(thread, devicePacked, attribute, value);
EGLBoolean returnValue = QueryDeviceAttribEXT(thread, devicePacked, attribute, value);
ANGLE_CAPTURE_EGL(QueryDeviceAttribEXT, true, thread, devicePacked, attribute, value,
returnValue);
return returnValue;
}
const char *EGLAPIENTRY EGL_QueryDeviceStringEXT(EGLDeviceEXT device, EGLint name)
@ -696,7 +779,9 @@ const char *EGLAPIENTRY EGL_QueryDeviceStringEXT(EGLDeviceEXT device, EGLint nam
ANGLE_EGL_VALIDATE(thread, QueryDeviceStringEXT, nullptr, const char *, devicePacked, name);
return QueryDeviceStringEXT(thread, devicePacked, name);
const char *returnValue = QueryDeviceStringEXT(thread, devicePacked, name);
ANGLE_CAPTURE_EGL(QueryDeviceStringEXT, true, thread, devicePacked, name, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_QueryDisplayAttribEXT(EGLDisplay dpy, EGLint attribute, EGLAttrib *value)
@ -714,7 +799,10 @@ EGLBoolean EGLAPIENTRY EGL_QueryDisplayAttribEXT(EGLDisplay dpy, EGLint attribut
ANGLE_EGL_VALIDATE(thread, QueryDisplayAttribEXT, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, attribute, value);
return QueryDisplayAttribEXT(thread, dpyPacked, attribute, value);
EGLBoolean returnValue = QueryDisplayAttribEXT(thread, dpyPacked, attribute, value);
ANGLE_CAPTURE_EGL(QueryDisplayAttribEXT, true, thread, dpyPacked, attribute, value,
returnValue);
return returnValue;
}
// EGL_EXT_image_dma_buf_import_modifiers
@ -737,7 +825,11 @@ EGLBoolean EGLAPIENTRY EGL_QueryDmaBufFormatsEXT(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, QueryDmaBufFormatsEXT, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, max_formats, formats, num_formats);
return QueryDmaBufFormatsEXT(thread, dpyPacked, max_formats, formats, num_formats);
EGLBoolean returnValue =
QueryDmaBufFormatsEXT(thread, dpyPacked, max_formats, formats, num_formats);
ANGLE_CAPTURE_EGL(QueryDmaBufFormatsEXT, true, thread, dpyPacked, max_formats, formats,
num_formats, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_QueryDmaBufModifiersEXT(EGLDisplay dpy,
@ -762,8 +854,11 @@ EGLBoolean EGLAPIENTRY EGL_QueryDmaBufModifiersEXT(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, QueryDmaBufModifiersEXT, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, format, max_modifiers, modifiers, external_only, num_modifiers);
return QueryDmaBufModifiersEXT(thread, dpyPacked, format, max_modifiers, modifiers,
external_only, num_modifiers);
EGLBoolean returnValue = QueryDmaBufModifiersEXT(thread, dpyPacked, format, max_modifiers,
modifiers, external_only, num_modifiers);
ANGLE_CAPTURE_EGL(QueryDmaBufModifiersEXT, true, thread, dpyPacked, format, max_modifiers,
modifiers, external_only, num_modifiers, returnValue);
return returnValue;
}
// EGL_EXT_platform_base
@ -788,8 +883,11 @@ EGLSurface EGLAPIENTRY EGL_CreatePlatformPixmapSurfaceEXT(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, CreatePlatformPixmapSurfaceEXT, GetDisplayIfValid(dpyPacked),
EGLSurface, dpyPacked, configPacked, native_pixmap, attrib_listPacked);
return CreatePlatformPixmapSurfaceEXT(thread, dpyPacked, configPacked, native_pixmap,
attrib_listPacked);
EGLSurface returnValue = CreatePlatformPixmapSurfaceEXT(thread, dpyPacked, configPacked,
native_pixmap, attrib_listPacked);
ANGLE_CAPTURE_EGL(CreatePlatformPixmapSurfaceEXT, true, thread, dpyPacked, configPacked,
native_pixmap, attrib_listPacked, returnValue);
return returnValue;
}
EGLSurface EGLAPIENTRY EGL_CreatePlatformWindowSurfaceEXT(EGLDisplay dpy,
@ -813,8 +911,11 @@ EGLSurface EGLAPIENTRY EGL_CreatePlatformWindowSurfaceEXT(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, CreatePlatformWindowSurfaceEXT, GetDisplayIfValid(dpyPacked),
EGLSurface, dpyPacked, configPacked, native_window, attrib_listPacked);
return CreatePlatformWindowSurfaceEXT(thread, dpyPacked, configPacked, native_window,
attrib_listPacked);
EGLSurface returnValue = CreatePlatformWindowSurfaceEXT(thread, dpyPacked, configPacked,
native_window, attrib_listPacked);
ANGLE_CAPTURE_EGL(CreatePlatformWindowSurfaceEXT, true, thread, dpyPacked, configPacked,
native_window, attrib_listPacked, returnValue);
return returnValue;
}
EGLDisplay EGLAPIENTRY EGL_GetPlatformDisplayEXT(EGLenum platform,
@ -835,7 +936,11 @@ EGLDisplay EGLAPIENTRY EGL_GetPlatformDisplayEXT(EGLenum platform,
ANGLE_EGL_VALIDATE(thread, GetPlatformDisplayEXT, nullptr, EGLDisplay, platform, native_display,
attrib_listPacked);
return GetPlatformDisplayEXT(thread, platform, native_display, attrib_listPacked);
EGLDisplay returnValue =
GetPlatformDisplayEXT(thread, platform, native_display, attrib_listPacked);
ANGLE_CAPTURE_EGL(GetPlatformDisplayEXT, true, thread, platform, native_display,
attrib_listPacked, returnValue);
return returnValue;
}
// EGL_KHR_debug
@ -855,7 +960,10 @@ EGLint EGLAPIENTRY EGL_DebugMessageControlKHR(EGLDEBUGPROCKHR callback,
ANGLE_EGL_VALIDATE(thread, DebugMessageControlKHR, nullptr, EGLint, callback,
attrib_listPacked);
return DebugMessageControlKHR(thread, callback, attrib_listPacked);
EGLint returnValue = DebugMessageControlKHR(thread, callback, attrib_listPacked);
ANGLE_CAPTURE_EGL(DebugMessageControlKHR, true, thread, callback, attrib_listPacked,
returnValue);
return returnValue;
}
EGLint EGLAPIENTRY EGL_LabelObjectKHR(EGLDisplay display,
@ -878,7 +986,10 @@ EGLint EGLAPIENTRY EGL_LabelObjectKHR(EGLDisplay display,
ANGLE_EGL_VALIDATE(thread, LabelObjectKHR, GetDisplayIfValid(displayPacked), EGLint,
displayPacked, objectTypePacked, object, label);
return LabelObjectKHR(thread, displayPacked, objectTypePacked, object, label);
EGLint returnValue = LabelObjectKHR(thread, displayPacked, objectTypePacked, object, label);
ANGLE_CAPTURE_EGL(LabelObjectKHR, true, thread, displayPacked, objectTypePacked, object, label,
returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_QueryDebugKHR(EGLint attribute, EGLAttrib *value)
@ -892,7 +1003,9 @@ EGLBoolean EGLAPIENTRY EGL_QueryDebugKHR(EGLint attribute, EGLAttrib *value)
ANGLE_EGL_VALIDATE(thread, QueryDebugKHR, nullptr, EGLBoolean, attribute, value);
return QueryDebugKHR(thread, attribute, value);
EGLBoolean returnValue = QueryDebugKHR(thread, attribute, value);
ANGLE_CAPTURE_EGL(QueryDebugKHR, true, thread, attribute, value, returnValue);
return returnValue;
}
// EGL_KHR_fence_sync
@ -915,7 +1028,10 @@ EGLint EGLAPIENTRY EGL_ClientWaitSyncKHR(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, ClientWaitSyncKHR, GetDisplayIfValid(dpyPacked), EGLint, dpyPacked,
syncPacked, flags, timeout);
return ClientWaitSyncKHR(thread, dpyPacked, syncPacked, flags, timeout);
EGLint returnValue = ClientWaitSyncKHR(thread, dpyPacked, syncPacked, flags, timeout);
ANGLE_CAPTURE_EGL(ClientWaitSyncKHR, true, thread, dpyPacked, syncPacked, flags, timeout,
returnValue);
return returnValue;
}
EGLSyncKHR EGLAPIENTRY EGL_CreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list)
@ -934,7 +1050,9 @@ EGLSyncKHR EGLAPIENTRY EGL_CreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGL
ANGLE_EGL_VALIDATE(thread, CreateSyncKHR, GetDisplayIfValid(dpyPacked), EGLSyncKHR, dpyPacked,
type, attrib_listPacked);
return CreateSyncKHR(thread, dpyPacked, type, attrib_listPacked);
EGLSyncKHR returnValue = CreateSyncKHR(thread, dpyPacked, type, attrib_listPacked);
ANGLE_CAPTURE_EGL(CreateSyncKHR, true, thread, dpyPacked, type, attrib_listPacked, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_DestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync)
@ -952,7 +1070,9 @@ EGLBoolean EGLAPIENTRY EGL_DestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync)
ANGLE_EGL_VALIDATE(thread, DestroySyncKHR, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
syncPacked);
return DestroySyncKHR(thread, dpyPacked, syncPacked);
EGLBoolean returnValue = DestroySyncKHR(thread, dpyPacked, syncPacked);
ANGLE_CAPTURE_EGL(DestroySyncKHR, true, thread, dpyPacked, syncPacked, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_GetSyncAttribKHR(EGLDisplay dpy,
@ -975,7 +1095,10 @@ EGLBoolean EGLAPIENTRY EGL_GetSyncAttribKHR(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, GetSyncAttribKHR, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, syncPacked, attribute, value);
return GetSyncAttribKHR(thread, dpyPacked, syncPacked, attribute, value);
EGLBoolean returnValue = GetSyncAttribKHR(thread, dpyPacked, syncPacked, attribute, value);
ANGLE_CAPTURE_EGL(GetSyncAttribKHR, true, thread, dpyPacked, syncPacked, attribute, value,
returnValue);
return returnValue;
}
// EGL_KHR_image
@ -1001,7 +1124,11 @@ EGLImageKHR EGLAPIENTRY EGL_CreateImageKHR(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, CreateImageKHR, GetDisplayIfValid(dpyPacked), EGLImageKHR, dpyPacked,
ctxPacked, target, buffer, attrib_listPacked);
return CreateImageKHR(thread, dpyPacked, ctxPacked, target, buffer, attrib_listPacked);
EGLImageKHR returnValue =
CreateImageKHR(thread, dpyPacked, ctxPacked, target, buffer, attrib_listPacked);
ANGLE_CAPTURE_EGL(CreateImageKHR, true, thread, dpyPacked, ctxPacked, target, buffer,
attrib_listPacked, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_DestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)
@ -1019,7 +1146,9 @@ EGLBoolean EGLAPIENTRY EGL_DestroyImageKHR(EGLDisplay dpy, EGLImageKHR image)
ANGLE_EGL_VALIDATE(thread, DestroyImageKHR, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
imagePacked);
return DestroyImageKHR(thread, dpyPacked, imagePacked);
EGLBoolean returnValue = DestroyImageKHR(thread, dpyPacked, imagePacked);
ANGLE_CAPTURE_EGL(DestroyImageKHR, true, thread, dpyPacked, imagePacked, returnValue);
return returnValue;
}
// EGL_KHR_lock_surface3
@ -1044,7 +1173,10 @@ EGLBoolean EGLAPIENTRY EGL_LockSurfaceKHR(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, LockSurfaceKHR, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
surfacePacked, attrib_listPacked);
return LockSurfaceKHR(thread, dpyPacked, surfacePacked, attrib_listPacked);
EGLBoolean returnValue = LockSurfaceKHR(thread, dpyPacked, surfacePacked, attrib_listPacked);
ANGLE_CAPTURE_EGL(LockSurfaceKHR, true, thread, dpyPacked, surfacePacked, attrib_listPacked,
returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_QuerySurface64KHR(EGLDisplay dpy,
@ -1068,7 +1200,10 @@ EGLBoolean EGLAPIENTRY EGL_QuerySurface64KHR(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, QuerySurface64KHR, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, surfacePacked, attribute, value);
return QuerySurface64KHR(thread, dpyPacked, surfacePacked, attribute, value);
EGLBoolean returnValue = QuerySurface64KHR(thread, dpyPacked, surfacePacked, attribute, value);
ANGLE_CAPTURE_EGL(QuerySurface64KHR, true, thread, dpyPacked, surfacePacked, attribute, value,
returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_UnlockSurfaceKHR(EGLDisplay dpy, EGLSurface surface)
@ -1087,7 +1222,9 @@ EGLBoolean EGLAPIENTRY EGL_UnlockSurfaceKHR(EGLDisplay dpy, EGLSurface surface)
ANGLE_EGL_VALIDATE(thread, UnlockSurfaceKHR, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, surfacePacked);
return UnlockSurfaceKHR(thread, dpyPacked, surfacePacked);
EGLBoolean returnValue = UnlockSurfaceKHR(thread, dpyPacked, surfacePacked);
ANGLE_CAPTURE_EGL(UnlockSurfaceKHR, true, thread, dpyPacked, surfacePacked, returnValue);
return returnValue;
}
// EGL_KHR_partial_update
@ -1112,7 +1249,10 @@ EGLBoolean EGLAPIENTRY EGL_SetDamageRegionKHR(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, SetDamageRegionKHR, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, surfacePacked, rects, n_rects);
return SetDamageRegionKHR(thread, dpyPacked, surfacePacked, rects, n_rects);
EGLBoolean returnValue = SetDamageRegionKHR(thread, dpyPacked, surfacePacked, rects, n_rects);
ANGLE_CAPTURE_EGL(SetDamageRegionKHR, true, thread, dpyPacked, surfacePacked, rects, n_rects,
returnValue);
return returnValue;
}
// EGL_KHR_reusable_sync
@ -1131,7 +1271,9 @@ EGLBoolean EGLAPIENTRY EGL_SignalSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLenu
ANGLE_EGL_VALIDATE(thread, SignalSyncKHR, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
syncPacked, mode);
return SignalSyncKHR(thread, dpyPacked, syncPacked, mode);
EGLBoolean returnValue = SignalSyncKHR(thread, dpyPacked, syncPacked, mode);
ANGLE_CAPTURE_EGL(SignalSyncKHR, true, thread, dpyPacked, syncPacked, mode, returnValue);
return returnValue;
}
// ClientWaitSyncKHR is already defined.
@ -1158,7 +1300,9 @@ EGLStreamKHR EGLAPIENTRY EGL_CreateStreamKHR(EGLDisplay dpy, const EGLint *attri
ANGLE_EGL_VALIDATE(thread, CreateStreamKHR, GetDisplayIfValid(dpyPacked), EGLStreamKHR,
dpyPacked, attrib_listPacked);
return CreateStreamKHR(thread, dpyPacked, attrib_listPacked);
EGLStreamKHR returnValue = CreateStreamKHR(thread, dpyPacked, attrib_listPacked);
ANGLE_CAPTURE_EGL(CreateStreamKHR, true, thread, dpyPacked, attrib_listPacked, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_DestroyStreamKHR(EGLDisplay dpy, EGLStreamKHR stream)
@ -1176,7 +1320,9 @@ EGLBoolean EGLAPIENTRY EGL_DestroyStreamKHR(EGLDisplay dpy, EGLStreamKHR stream)
ANGLE_EGL_VALIDATE(thread, DestroyStreamKHR, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, streamPacked);
return DestroyStreamKHR(thread, dpyPacked, streamPacked);
EGLBoolean returnValue = DestroyStreamKHR(thread, dpyPacked, streamPacked);
ANGLE_CAPTURE_EGL(DestroyStreamKHR, true, thread, dpyPacked, streamPacked, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_QueryStreamKHR(EGLDisplay dpy,
@ -1199,7 +1345,10 @@ EGLBoolean EGLAPIENTRY EGL_QueryStreamKHR(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, QueryStreamKHR, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
streamPacked, attribute, value);
return QueryStreamKHR(thread, dpyPacked, streamPacked, attribute, value);
EGLBoolean returnValue = QueryStreamKHR(thread, dpyPacked, streamPacked, attribute, value);
ANGLE_CAPTURE_EGL(QueryStreamKHR, true, thread, dpyPacked, streamPacked, attribute, value,
returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_QueryStreamu64KHR(EGLDisplay dpy,
@ -1222,7 +1371,10 @@ EGLBoolean EGLAPIENTRY EGL_QueryStreamu64KHR(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, QueryStreamu64KHR, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, streamPacked, attribute, value);
return QueryStreamu64KHR(thread, dpyPacked, streamPacked, attribute, value);
EGLBoolean returnValue = QueryStreamu64KHR(thread, dpyPacked, streamPacked, attribute, value);
ANGLE_CAPTURE_EGL(QueryStreamu64KHR, true, thread, dpyPacked, streamPacked, attribute, value,
returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_StreamAttribKHR(EGLDisplay dpy,
@ -1244,7 +1396,10 @@ EGLBoolean EGLAPIENTRY EGL_StreamAttribKHR(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, StreamAttribKHR, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
streamPacked, attribute, value);
return StreamAttribKHR(thread, dpyPacked, streamPacked, attribute, value);
EGLBoolean returnValue = StreamAttribKHR(thread, dpyPacked, streamPacked, attribute, value);
ANGLE_CAPTURE_EGL(StreamAttribKHR, true, thread, dpyPacked, streamPacked, attribute, value,
returnValue);
return returnValue;
}
// EGL_KHR_stream_consumer_gltexture
@ -1263,7 +1418,9 @@ EGLBoolean EGLAPIENTRY EGL_StreamConsumerAcquireKHR(EGLDisplay dpy, EGLStreamKHR
ANGLE_EGL_VALIDATE(thread, StreamConsumerAcquireKHR, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, streamPacked);
return StreamConsumerAcquireKHR(thread, dpyPacked, streamPacked);
EGLBoolean returnValue = StreamConsumerAcquireKHR(thread, dpyPacked, streamPacked);
ANGLE_CAPTURE_EGL(StreamConsumerAcquireKHR, true, thread, dpyPacked, streamPacked, returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_StreamConsumerGLTextureExternalKHR(EGLDisplay dpy, EGLStreamKHR stream)
@ -1282,7 +1439,10 @@ EGLBoolean EGLAPIENTRY EGL_StreamConsumerGLTextureExternalKHR(EGLDisplay dpy, EG
ANGLE_EGL_VALIDATE(thread, StreamConsumerGLTextureExternalKHR, GetDisplayIfValid(dpyPacked),
EGLBoolean, dpyPacked, streamPacked);
return StreamConsumerGLTextureExternalKHR(thread, dpyPacked, streamPacked);
EGLBoolean returnValue = StreamConsumerGLTextureExternalKHR(thread, dpyPacked, streamPacked);
ANGLE_CAPTURE_EGL(StreamConsumerGLTextureExternalKHR, true, thread, dpyPacked, streamPacked,
returnValue);
return returnValue;
}
EGLBoolean EGLAPIENTRY EGL_StreamConsumerReleaseKHR(EGLDisplay dpy, EGLStreamKHR stream)
@ -1300,7 +1460,9 @@ EGLBoolean EGLAPIENTRY EGL_StreamConsumerReleaseKHR(EGLDisplay dpy, EGLStreamKHR
ANGLE_EGL_VALIDATE(thread, StreamConsumerReleaseKHR, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, streamPacked);
return StreamConsumerReleaseKHR(thread, dpyPacked, streamPacked);
EGLBoolean returnValue = StreamConsumerReleaseKHR(thread, dpyPacked, streamPacked);
ANGLE_CAPTURE_EGL(StreamConsumerReleaseKHR, true, thread, dpyPacked, streamPacked, returnValue);
return returnValue;
}
// EGL_KHR_swap_buffers_with_damage
@ -1325,7 +1487,11 @@ EGLBoolean EGLAPIENTRY EGL_SwapBuffersWithDamageKHR(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, SwapBuffersWithDamageKHR, GetDisplayIfValid(dpyPacked), EGLBoolean,
dpyPacked, surfacePacked, rects, n_rects);
return SwapBuffersWithDamageKHR(thread, dpyPacked, surfacePacked, rects, n_rects);
EGLBoolean returnValue =
SwapBuffersWithDamageKHR(thread, dpyPacked, surfacePacked, rects, n_rects);
ANGLE_CAPTURE_EGL(SwapBuffersWithDamageKHR, true, thread, dpyPacked, surfacePacked, rects,
n_rects, returnValue);
return returnValue;
}
// EGL_KHR_wait_sync
@ -1344,7 +1510,9 @@ EGLint EGLAPIENTRY EGL_WaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags
ANGLE_EGL_VALIDATE(thread, WaitSyncKHR, GetDisplayIfValid(dpyPacked), EGLint, dpyPacked,
syncPacked, flags);
return WaitSyncKHR(thread, dpyPacked, syncPacked, flags);
EGLint returnValue = WaitSyncKHR(thread, dpyPacked, syncPacked, flags);
ANGLE_CAPTURE_EGL(WaitSyncKHR, true, thread, dpyPacked, syncPacked, flags, returnValue);
return returnValue;
}
// EGL_NV_post_sub_buffer
@ -1371,7 +1539,10 @@ EGLBoolean EGLAPIENTRY EGL_PostSubBufferNV(EGLDisplay dpy,
ANGLE_EGL_VALIDATE(thread, PostSubBufferNV, GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked,
surfacePacked, x, y, width, height);
return PostSubBufferNV(thread, dpyPacked, surfacePacked, x, y, width, height);
EGLBoolean returnValue = PostSubBufferNV(thread, dpyPacked, surfacePacked, x, y, width, height);
ANGLE_CAPTURE_EGL(PostSubBufferNV, true, thread, dpyPacked, surfacePacked, x, y, width, height,
returnValue);
return returnValue;
}
// EGL_NV_stream_consumer_gltexture_yuv
@ -1396,8 +1567,11 @@ EGLBoolean EGLAPIENTRY EGL_StreamConsumerGLTextureExternalAttribsNV(EGLDisplay d
GetDisplayIfValid(dpyPacked), EGLBoolean, dpyPacked, streamPacked,
attrib_listPacked);
return StreamConsumerGLTextureExternalAttribsNV(thread, dpyPacked, streamPacked,
attrib_listPacked);
EGLBoolean returnValue = StreamConsumerGLTextureExternalAttribsNV(
thread, dpyPacked, streamPacked, attrib_listPacked);
ANGLE_CAPTURE_EGL(StreamConsumerGLTextureExternalAttribsNV, true, thread, dpyPacked,
streamPacked, attrib_listPacked, returnValue);
return returnValue;
}
} // extern "C"