Commit d0e56cc6 by Jiacheng Lu Committed by Commit Bot

Add fallback to write GLenum as hex in capture

1. Add extension 'GL_ANGLE_program_binary' to registry_xml.py, this extension brings enum 'GL_PROGRAM_BINARY_ANGLE' which ANGLE already supports. 2. Add a fallback for converting GLenum and GLbitfield to string, for any GLenum value not found in the conversion table, write out its hex value instead of 'EnumUnknown'. It prevents GLenum from some unregistered extensions breaking the frame capture. Bug: angleproject:3804 Change-Id: I36a676305fbbcff2173bbc9f818ff589abe51434 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1775028 Commit-Queue: Tobin Ehlis <tobine@google.com> Reviewed-by: 's avatarTobin Ehlis <tobine@google.com>
parent d5fe2eeb
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
"scripts/generate_loader.py": "scripts/generate_loader.py":
"48c60c668bec42a80378179aae2acc61", "48c60c668bec42a80378179aae2acc61",
"scripts/registry_xml.py": "scripts/registry_xml.py":
"4bca907fa03306e762a78c12c91a3f04", "cdf43c79a91f68bf8678b4c2cb75e9f1",
"scripts/wgl.xml": "scripts/wgl.xml":
"aa96419c582af2f6673430e2847693f4", "aa96419c582af2f6673430e2847693f4",
"src/libEGL/egl_loader_autogen.cpp": "src/libEGL/egl_loader_autogen.cpp":
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
"scripts/gl_angle_ext.xml": "scripts/gl_angle_ext.xml":
"82d1e91d75d8935a44312da31adca77c", "82d1e91d75d8935a44312da31adca77c",
"scripts/registry_xml.py": "scripts/registry_xml.py":
"4bca907fa03306e762a78c12c91a3f04", "cdf43c79a91f68bf8678b4c2cb75e9f1",
"scripts/wgl.xml": "scripts/wgl.xml":
"aa96419c582af2f6673430e2847693f4", "aa96419c582af2f6673430e2847693f4",
"src/libANGLE/Context_gl_1_0_autogen.h": "src/libANGLE/Context_gl_1_0_autogen.h":
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
"src/libANGLE/Context_gles_3_1_autogen.h": "src/libANGLE/Context_gles_3_1_autogen.h":
"8aef8ceb87eed9cc7e9586f6c98796e3", "8aef8ceb87eed9cc7e9586f6c98796e3",
"src/libANGLE/Context_gles_ext_autogen.h": "src/libANGLE/Context_gles_ext_autogen.h":
"a7e37a05b04abb68db27b0bfd79cafb5", "c7d505f0489a2be711c7f56cb850c83c",
"src/libANGLE/capture_gles_1_0_autogen.cpp": "src/libANGLE/capture_gles_1_0_autogen.cpp":
"f4e1335bebff584d2ac5198571b19972", "f4e1335bebff584d2ac5198571b19972",
"src/libANGLE/capture_gles_1_0_autogen.h": "src/libANGLE/capture_gles_1_0_autogen.h":
...@@ -82,7 +82,7 @@ ...@@ -82,7 +82,7 @@
"src/libANGLE/capture_gles_ext_autogen.cpp": "src/libANGLE/capture_gles_ext_autogen.cpp":
"fe8aa29a35d1417adaac9862c378479b", "fe8aa29a35d1417adaac9862c378479b",
"src/libANGLE/capture_gles_ext_autogen.h": "src/libANGLE/capture_gles_ext_autogen.h":
"0e4dc21c61300af71b8b3cea79993c8f", "7302c634b35c9ca51013f2b5227798ab",
"src/libANGLE/entry_points_enum_autogen.cpp": "src/libANGLE/entry_points_enum_autogen.cpp":
"5f23a920c3954797f71b05b5f5f4ef6c", "5f23a920c3954797f71b05b5f5f4ef6c",
"src/libANGLE/entry_points_enum_autogen.h": "src/libANGLE/entry_points_enum_autogen.h":
...@@ -102,7 +102,7 @@ ...@@ -102,7 +102,7 @@
"src/libANGLE/validationES3_autogen.h": "src/libANGLE/validationES3_autogen.h":
"1b470a8e190aa007f093f1f13f3b1a8c", "1b470a8e190aa007f093f1f13f3b1a8c",
"src/libANGLE/validationESEXT_autogen.h": "src/libANGLE/validationESEXT_autogen.h":
"0c4272008f8be8ceb3d51174476eacda", "b864cb4b9db58eec6c918d43f4c1769a",
"src/libANGLE/validationGL11_autogen.h": "src/libANGLE/validationGL11_autogen.h":
"c5ac1ca523a39df2621d11e92c9c821a", "c5ac1ca523a39df2621d11e92c9c821a",
"src/libANGLE/validationGL12_autogen.h": "src/libANGLE/validationGL12_autogen.h":
...@@ -238,15 +238,15 @@ ...@@ -238,15 +238,15 @@
"src/libGLESv2/entry_points_gles_3_1_autogen.h": "src/libGLESv2/entry_points_gles_3_1_autogen.h":
"043d09a964c740067bf4279e0b544aed", "043d09a964c740067bf4279e0b544aed",
"src/libGLESv2/entry_points_gles_ext_autogen.cpp": "src/libGLESv2/entry_points_gles_ext_autogen.cpp":
"929d33ae5617423356fe96c496d039e8", "66e038c73dadb5c18c315d2b13c9de34",
"src/libGLESv2/entry_points_gles_ext_autogen.h": "src/libGLESv2/entry_points_gles_ext_autogen.h":
"74c308be2863f765ba6bf1e9a70c9536", "a35c43b49cb2c38d9c45de69732c5efe",
"src/libGLESv2/libGLESv2_autogen.cpp": "src/libGLESv2/libGLESv2_autogen.cpp":
"aca14dd4aef31b066ce3ef9d94a834ef", "7c7f1662bf67ca148037b587a6226ff7",
"src/libGLESv2/libGLESv2_autogen.def": "src/libGLESv2/libGLESv2_autogen.def":
"ee1256aad1364c84c3a71986dbdeb450", "70015961f00f3227e0225b506a847b71",
"src/libGLESv2/libGLESv2_no_capture_autogen.def": "src/libGLESv2/libGLESv2_no_capture_autogen.def":
"33af046c0a007a0d5eae315efc823def", "ce02686ccde4f771596f5c088d96421e",
"src/libGLESv2/libGLESv2_with_capture_autogen.def": "src/libGLESv2/libGLESv2_with_capture_autogen.def":
"8f166fcd41a010bb13f44a00069979af" "4fd4af5d593df7dfe62e195c24eaa462"
} }
\ No newline at end of file
{ {
"scripts/gen_gl_enum_utils.py": "scripts/gen_gl_enum_utils.py":
"aefa4a2651b184aaf1e3b83dea1dc253", "4b28bec044c430d8c0a7fbbadd550720",
"scripts/gl.xml": "scripts/gl.xml":
"b470cb06b06cbbe7adb2c8129ec85708", "b470cb06b06cbbe7adb2c8129ec85708",
"scripts/gl_angle_ext.xml": "scripts/gl_angle_ext.xml":
"82d1e91d75d8935a44312da31adca77c", "82d1e91d75d8935a44312da31adca77c",
"src/libANGLE/gl_enum_utils_autogen.cpp": "src/libANGLE/gl_enum_utils_autogen.cpp":
"72d7c2a5b96fd0099e2f03d631d7637f", "908a0bad79aa58f1bfa66ad32c728ae5",
"src/libANGLE/gl_enum_utils_autogen.h": "src/libANGLE/gl_enum_utils_autogen.h":
"9f539607968a5a53256443740407893b" "b6b36e2bbb676ed3b744e883b0d101e1"
} }
\ No newline at end of file
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
"scripts/gl_angle_ext.xml": "scripts/gl_angle_ext.xml":
"82d1e91d75d8935a44312da31adca77c", "82d1e91d75d8935a44312da31adca77c",
"scripts/registry_xml.py": "scripts/registry_xml.py":
"4bca907fa03306e762a78c12c91a3f04", "cdf43c79a91f68bf8678b4c2cb75e9f1",
"scripts/wgl.xml": "scripts/wgl.xml":
"aa96419c582af2f6673430e2847693f4", "aa96419c582af2f6673430e2847693f4",
"src/libGL/proc_table_wgl_autogen.cpp": "src/libGL/proc_table_wgl_autogen.cpp":
......
...@@ -28,6 +28,7 @@ template_gl_enums_header = """// GENERATED FILE - DO NOT EDIT. ...@@ -28,6 +28,7 @@ template_gl_enums_header = """// GENERATED FILE - DO NOT EDIT.
# define LIBANGLE_GL_ENUM_UTILS_AUTOGEN_H_ # define LIBANGLE_GL_ENUM_UTILS_AUTOGEN_H_
#include <string> #include <string>
#include <ostream>
#include "common/PackedGLEnums_autogen.h" #include "common/PackedGLEnums_autogen.h"
...@@ -44,6 +45,10 @@ const char *GLenumToString(GLenumGroup enumGroup, unsigned int value); ...@@ -44,6 +45,10 @@ const char *GLenumToString(GLenumGroup enumGroup, unsigned int value);
std::string GLbitfieldToString(GLenumGroup enumGroup, unsigned int value); std::string GLbitfieldToString(GLenumGroup enumGroup, unsigned int value);
void OutputGLenumString(std::ostream &out, GLenumGroup enumGroup, unsigned int value);
void OutputGLbitfieldString(std::ostream &out, GLenumGroup enumGroup, unsigned int value);
}} }}
# endif // LIBANGLE_GL_ENUM_UTILS_AUTOGEN_H_ # endif // LIBANGLE_GL_ENUM_UTILS_AUTOGEN_H_
...@@ -68,6 +73,29 @@ template_gl_enums_source = """// GENERATED FILE - DO NOT EDIT. ...@@ -68,6 +73,29 @@ template_gl_enums_source = """// GENERATED FILE - DO NOT EDIT.
namespace gl namespace gl
{{ {{
namespace
{{
constexpr char kEnumUnknown[] = "EnumUnknown";
}} // anonymous namespace
void OutputGLenumString(std::ostream &out, GLenumGroup enumGroup, unsigned int value)
{{
const char *enumStr = GLenumToString(enumGroup, value);
if (enumStr != kEnumUnknown)
{{
out << enumStr;
}}
else
{{
out << std::hex << value << std::dec;
}}
}}
void OutputGLbitfieldString(std::ostream &out, GLenumGroup enumGroup, unsigned int value)
{{
out << GLbitfieldToString(enumGroup, value);
}}
const char *GLbooleanToString(unsigned int value) {{ const char *GLbooleanToString(unsigned int value) {{
switch (value) {{ switch (value) {{
case 0x0: case 0x0:
...@@ -75,7 +103,7 @@ const char *GLbooleanToString(unsigned int value) {{ ...@@ -75,7 +103,7 @@ const char *GLbooleanToString(unsigned int value) {{
case 0x1: case 0x1:
return "GL_TRUE"; return "GL_TRUE";
default: default:
return "EnumUnknown"; return kEnumUnknown;
}} }}
}} }}
...@@ -83,7 +111,7 @@ const char *GLenumToString(GLenumGroup enumGroup, unsigned int value) {{ ...@@ -83,7 +111,7 @@ const char *GLenumToString(GLenumGroup enumGroup, unsigned int value) {{
switch (enumGroup) {{ switch (enumGroup) {{
{gl_enums_value_to_string_table} {gl_enums_value_to_string_table}
default: default:
return "EnumUnknown"; return kEnumUnknown;
}} }}
}} }}
...@@ -102,7 +130,7 @@ std::string GLbitfieldToString(GLenumGroup enumGroup, unsigned int value) {{ ...@@ -102,7 +130,7 @@ std::string GLbitfieldToString(GLenumGroup enumGroup, unsigned int value) {{
first = false; first = false;
unsigned int mask = 1u << index; unsigned int mask = 1u << index;
st << GLenumToString(enumGroup, mask); OutputGLenumString(st, enumGroup, mask);
}} }}
return st.str(); return st.str();
...@@ -116,7 +144,7 @@ template_enum_group_case = """case GLenumGroup::{group_name}: {{ ...@@ -116,7 +144,7 @@ template_enum_group_case = """case GLenumGroup::{group_name}: {{
switch (value) {{ switch (value) {{
{inner_group_cases} {inner_group_cases}
default: default:
return "EnumUnknown"; return kEnumUnknown;
}} }}
}} }}
""" """
......
...@@ -31,9 +31,10 @@ angle_extensions = [ ...@@ -31,9 +31,10 @@ angle_extensions = [
"GL_CHROMIUM_copy_texture", "GL_CHROMIUM_copy_texture",
"GL_CHROMIUM_copy_compressed_texture", "GL_CHROMIUM_copy_compressed_texture",
"GL_CHROMIUM_lose_context", "GL_CHROMIUM_lose_context",
"GL_ANGLE_copy_texture_3d",
"GL_ANGLE_program_binary",
"GL_ANGLE_request_extension", "GL_ANGLE_request_extension",
"GL_ANGLE_robust_client_memory", "GL_ANGLE_robust_client_memory",
"GL_ANGLE_copy_texture_3d",
"GL_ANGLE_texture_external_update", "GL_ANGLE_texture_external_update",
] ]
......
...@@ -56,6 +56,7 @@ ...@@ -56,6 +56,7 @@
GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLint z, \ GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLint z, \
GLint width, GLint height, GLint depth, GLboolean unpackFlipY, \ GLint width, GLint height, GLint depth, GLboolean unpackFlipY, \
GLboolean unpackPremultiplyAlpha, GLboolean unpackUnmultiplyAlpha); \ GLboolean unpackPremultiplyAlpha, GLboolean unpackUnmultiplyAlpha); \
/* GL_ANGLE_program_binary */ \
/* GL_ANGLE_request_extension */ \ /* GL_ANGLE_request_extension */ \
void requestExtension(const GLchar *name); \ void requestExtension(const GLchar *name); \
/* GL_ANGLE_robust_client_memory */ \ /* GL_ANGLE_robust_client_memory */ \
......
...@@ -114,7 +114,9 @@ void WriteStringParamReplay(std::ostream &out, const ParamCapture &param) ...@@ -114,7 +114,9 @@ void WriteStringParamReplay(std::ostream &out, const ParamCapture &param)
ParamCapture::ParamCapture() : type(ParamType::TGLenum), enumGroup(gl::GLenumGroup::DefaultGroup) {} ParamCapture::ParamCapture() : type(ParamType::TGLenum), enumGroup(gl::GLenumGroup::DefaultGroup) {}
ParamCapture::ParamCapture(const char *nameIn, ParamType typeIn) : name(nameIn), type(typeIn) {} ParamCapture::ParamCapture(const char *nameIn, ParamType typeIn)
: name(nameIn), type(typeIn), enumGroup(gl::GLenumGroup::DefaultGroup)
{}
ParamCapture::~ParamCapture() = default; ParamCapture::~ParamCapture() = default;
...@@ -707,11 +709,11 @@ void FrameCapture::writeCallReplay(const CallCapture &call, ...@@ -707,11 +709,11 @@ void FrameCapture::writeCallReplay(const CallCapture &call,
{ {
if (param.type == ParamType::TGLenum) if (param.type == ParamType::TGLenum)
{ {
callOut << GLenumToString(param.enumGroup, param.value.GLenumVal); OutputGLenumString(callOut, param.enumGroup, param.value.GLenumVal);
} }
else if (param.type == ParamType::TGLbitfield) else if (param.type == ParamType::TGLbitfield)
{ {
callOut << GLbitfieldToString(param.enumGroup, param.value.GLbitfieldVal); OutputGLbitfieldString(callOut, param.enumGroup, param.value.GLbitfieldVal);
} }
else else
{ {
......
...@@ -163,6 +163,8 @@ angle::CallCapture CaptureMultiDrawElementsInstancedANGLE(const Context *context ...@@ -163,6 +163,8 @@ angle::CallCapture CaptureMultiDrawElementsInstancedANGLE(const Context *context
const GLsizei *instanceCounts, const GLsizei *instanceCounts,
GLsizei drawcount); GLsizei drawcount);
// GL_ANGLE_program_binary
// GL_ANGLE_provoking_vertex // GL_ANGLE_provoking_vertex
angle::CallCapture CaptureProvokingVertexANGLE(const Context *context, angle::CallCapture CaptureProvokingVertexANGLE(const Context *context,
bool isCallValid, bool isCallValid,
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#ifndef LIBANGLE_GL_ENUM_UTILS_AUTOGEN_H_ #ifndef LIBANGLE_GL_ENUM_UTILS_AUTOGEN_H_
#define LIBANGLE_GL_ENUM_UTILS_AUTOGEN_H_ #define LIBANGLE_GL_ENUM_UTILS_AUTOGEN_H_
#include <ostream>
#include <string> #include <string>
#include "common/PackedGLEnums_autogen.h" #include "common/PackedGLEnums_autogen.h"
...@@ -225,6 +226,10 @@ const char *GLenumToString(GLenumGroup enumGroup, unsigned int value); ...@@ -225,6 +226,10 @@ const char *GLenumToString(GLenumGroup enumGroup, unsigned int value);
std::string GLbitfieldToString(GLenumGroup enumGroup, unsigned int value); std::string GLbitfieldToString(GLenumGroup enumGroup, unsigned int value);
void OutputGLenumString(std::ostream &out, GLenumGroup enumGroup, unsigned int value);
void OutputGLbitfieldString(std::ostream &out, GLenumGroup enumGroup, unsigned int value);
} // namespace gl } // namespace gl
#endif // LIBANGLE_GL_ENUM_UTILS_AUTOGEN_H_ #endif // LIBANGLE_GL_ENUM_UTILS_AUTOGEN_H_
...@@ -141,6 +141,8 @@ bool ValidateMultiDrawElementsInstancedANGLE(Context *context, ...@@ -141,6 +141,8 @@ bool ValidateMultiDrawElementsInstancedANGLE(Context *context,
const GLsizei *instanceCounts, const GLsizei *instanceCounts,
GLsizei drawcount); GLsizei drawcount);
// GL_ANGLE_program_binary
// GL_ANGLE_provoking_vertex // GL_ANGLE_provoking_vertex
bool ValidateProvokingVertexANGLE(Context *context, ProvokingVertexConvention modePacked); bool ValidateProvokingVertexANGLE(Context *context, ProvokingVertexConvention modePacked);
......
...@@ -547,6 +547,8 @@ void GL_APIENTRY MultiDrawElementsInstancedANGLE(GLenum mode, ...@@ -547,6 +547,8 @@ void GL_APIENTRY MultiDrawElementsInstancedANGLE(GLenum mode,
} }
} }
// GL_ANGLE_program_binary
// GL_ANGLE_provoking_vertex // GL_ANGLE_provoking_vertex
void GL_APIENTRY ProvokingVertexANGLE(GLenum mode) void GL_APIENTRY ProvokingVertexANGLE(GLenum mode)
{ {
...@@ -133,6 +133,8 @@ ANGLE_EXPORT void GL_APIENTRY MultiDrawElementsInstancedANGLE(GLenum mode, ...@@ -133,6 +133,8 @@ ANGLE_EXPORT void GL_APIENTRY MultiDrawElementsInstancedANGLE(GLenum mode,
const GLsizei *instanceCounts, const GLsizei *instanceCounts,
GLsizei drawcount); GLsizei drawcount);
// GL_ANGLE_program_binary
// GL_ANGLE_provoking_vertex // GL_ANGLE_provoking_vertex
ANGLE_EXPORT void GL_APIENTRY ProvokingVertexANGLE(GLenum mode); ANGLE_EXPORT void GL_APIENTRY ProvokingVertexANGLE(GLenum mode);
......
...@@ -2593,6 +2593,8 @@ void GL_APIENTRY glMultiDrawElementsInstancedANGLE(GLenum mode, ...@@ -2593,6 +2593,8 @@ void GL_APIENTRY glMultiDrawElementsInstancedANGLE(GLenum mode,
drawcount); drawcount);
} }
// GL_ANGLE_program_binary
// GL_ANGLE_provoking_vertex // GL_ANGLE_provoking_vertex
void GL_APIENTRY glProvokingVertexANGLE(GLenum mode) void GL_APIENTRY glProvokingVertexANGLE(GLenum mode)
{ {
......
...@@ -442,6 +442,8 @@ EXPORTS ...@@ -442,6 +442,8 @@ EXPORTS
glMultiDrawElementsANGLE glMultiDrawElementsANGLE
glMultiDrawElementsInstancedANGLE glMultiDrawElementsInstancedANGLE
; GL_ANGLE_program_binary
; GL_ANGLE_provoking_vertex ; GL_ANGLE_provoking_vertex
glProvokingVertexANGLE glProvokingVertexANGLE
......
...@@ -442,6 +442,8 @@ EXPORTS ...@@ -442,6 +442,8 @@ EXPORTS
glMultiDrawElementsANGLE glMultiDrawElementsANGLE
glMultiDrawElementsInstancedANGLE glMultiDrawElementsInstancedANGLE
; GL_ANGLE_program_binary
; GL_ANGLE_provoking_vertex ; GL_ANGLE_provoking_vertex
glProvokingVertexANGLE glProvokingVertexANGLE
......
...@@ -442,6 +442,8 @@ EXPORTS ...@@ -442,6 +442,8 @@ EXPORTS
glMultiDrawElementsANGLE glMultiDrawElementsANGLE
glMultiDrawElementsInstancedANGLE glMultiDrawElementsInstancedANGLE
; GL_ANGLE_program_binary
; GL_ANGLE_provoking_vertex ; GL_ANGLE_provoking_vertex
glProvokingVertexANGLE glProvokingVertexANGLE
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment