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 @@
"scripts/generate_loader.py":
"48c60c668bec42a80378179aae2acc61",
"scripts/registry_xml.py":
"4bca907fa03306e762a78c12c91a3f04",
"cdf43c79a91f68bf8678b4c2cb75e9f1",
"scripts/wgl.xml":
"aa96419c582af2f6673430e2847693f4",
"src/libEGL/egl_loader_autogen.cpp":
......
......@@ -12,7 +12,7 @@
"scripts/gl_angle_ext.xml":
"82d1e91d75d8935a44312da31adca77c",
"scripts/registry_xml.py":
"4bca907fa03306e762a78c12c91a3f04",
"cdf43c79a91f68bf8678b4c2cb75e9f1",
"scripts/wgl.xml":
"aa96419c582af2f6673430e2847693f4",
"src/libANGLE/Context_gl_1_0_autogen.h":
......@@ -62,7 +62,7 @@
"src/libANGLE/Context_gles_3_1_autogen.h":
"8aef8ceb87eed9cc7e9586f6c98796e3",
"src/libANGLE/Context_gles_ext_autogen.h":
"a7e37a05b04abb68db27b0bfd79cafb5",
"c7d505f0489a2be711c7f56cb850c83c",
"src/libANGLE/capture_gles_1_0_autogen.cpp":
"f4e1335bebff584d2ac5198571b19972",
"src/libANGLE/capture_gles_1_0_autogen.h":
......@@ -82,7 +82,7 @@
"src/libANGLE/capture_gles_ext_autogen.cpp":
"fe8aa29a35d1417adaac9862c378479b",
"src/libANGLE/capture_gles_ext_autogen.h":
"0e4dc21c61300af71b8b3cea79993c8f",
"7302c634b35c9ca51013f2b5227798ab",
"src/libANGLE/entry_points_enum_autogen.cpp":
"5f23a920c3954797f71b05b5f5f4ef6c",
"src/libANGLE/entry_points_enum_autogen.h":
......@@ -102,7 +102,7 @@
"src/libANGLE/validationES3_autogen.h":
"1b470a8e190aa007f093f1f13f3b1a8c",
"src/libANGLE/validationESEXT_autogen.h":
"0c4272008f8be8ceb3d51174476eacda",
"b864cb4b9db58eec6c918d43f4c1769a",
"src/libANGLE/validationGL11_autogen.h":
"c5ac1ca523a39df2621d11e92c9c821a",
"src/libANGLE/validationGL12_autogen.h":
......@@ -238,15 +238,15 @@
"src/libGLESv2/entry_points_gles_3_1_autogen.h":
"043d09a964c740067bf4279e0b544aed",
"src/libGLESv2/entry_points_gles_ext_autogen.cpp":
"929d33ae5617423356fe96c496d039e8",
"66e038c73dadb5c18c315d2b13c9de34",
"src/libGLESv2/entry_points_gles_ext_autogen.h":
"74c308be2863f765ba6bf1e9a70c9536",
"a35c43b49cb2c38d9c45de69732c5efe",
"src/libGLESv2/libGLESv2_autogen.cpp":
"aca14dd4aef31b066ce3ef9d94a834ef",
"7c7f1662bf67ca148037b587a6226ff7",
"src/libGLESv2/libGLESv2_autogen.def":
"ee1256aad1364c84c3a71986dbdeb450",
"70015961f00f3227e0225b506a847b71",
"src/libGLESv2/libGLESv2_no_capture_autogen.def":
"33af046c0a007a0d5eae315efc823def",
"ce02686ccde4f771596f5c088d96421e",
"src/libGLESv2/libGLESv2_with_capture_autogen.def":
"8f166fcd41a010bb13f44a00069979af"
"4fd4af5d593df7dfe62e195c24eaa462"
}
\ No newline at end of file
{
"scripts/gen_gl_enum_utils.py":
"aefa4a2651b184aaf1e3b83dea1dc253",
"4b28bec044c430d8c0a7fbbadd550720",
"scripts/gl.xml":
"b470cb06b06cbbe7adb2c8129ec85708",
"scripts/gl_angle_ext.xml":
"82d1e91d75d8935a44312da31adca77c",
"src/libANGLE/gl_enum_utils_autogen.cpp":
"72d7c2a5b96fd0099e2f03d631d7637f",
"908a0bad79aa58f1bfa66ad32c728ae5",
"src/libANGLE/gl_enum_utils_autogen.h":
"9f539607968a5a53256443740407893b"
"b6b36e2bbb676ed3b744e883b0d101e1"
}
\ No newline at end of file
......@@ -10,7 +10,7 @@
"scripts/gl_angle_ext.xml":
"82d1e91d75d8935a44312da31adca77c",
"scripts/registry_xml.py":
"4bca907fa03306e762a78c12c91a3f04",
"cdf43c79a91f68bf8678b4c2cb75e9f1",
"scripts/wgl.xml":
"aa96419c582af2f6673430e2847693f4",
"src/libGL/proc_table_wgl_autogen.cpp":
......
......@@ -28,6 +28,7 @@ template_gl_enums_header = """// GENERATED FILE - DO NOT EDIT.
# define LIBANGLE_GL_ENUM_UTILS_AUTOGEN_H_
#include <string>
#include <ostream>
#include "common/PackedGLEnums_autogen.h"
......@@ -44,6 +45,10 @@ const char *GLenumToString(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_
......@@ -68,6 +73,29 @@ template_gl_enums_source = """// GENERATED FILE - DO NOT EDIT.
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) {{
switch (value) {{
case 0x0:
......@@ -75,7 +103,7 @@ const char *GLbooleanToString(unsigned int value) {{
case 0x1:
return "GL_TRUE";
default:
return "EnumUnknown";
return kEnumUnknown;
}}
}}
......@@ -83,7 +111,7 @@ const char *GLenumToString(GLenumGroup enumGroup, unsigned int value) {{
switch (enumGroup) {{
{gl_enums_value_to_string_table}
default:
return "EnumUnknown";
return kEnumUnknown;
}}
}}
......@@ -102,7 +130,7 @@ std::string GLbitfieldToString(GLenumGroup enumGroup, unsigned int value) {{
first = false;
unsigned int mask = 1u << index;
st << GLenumToString(enumGroup, mask);
OutputGLenumString(st, enumGroup, mask);
}}
return st.str();
......@@ -116,7 +144,7 @@ template_enum_group_case = """case GLenumGroup::{group_name}: {{
switch (value) {{
{inner_group_cases}
default:
return "EnumUnknown";
return kEnumUnknown;
}}
}}
"""
......
......@@ -31,9 +31,10 @@ angle_extensions = [
"GL_CHROMIUM_copy_texture",
"GL_CHROMIUM_copy_compressed_texture",
"GL_CHROMIUM_lose_context",
"GL_ANGLE_copy_texture_3d",
"GL_ANGLE_program_binary",
"GL_ANGLE_request_extension",
"GL_ANGLE_robust_client_memory",
"GL_ANGLE_copy_texture_3d",
"GL_ANGLE_texture_external_update",
]
......
......@@ -56,6 +56,7 @@
GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLint z, \
GLint width, GLint height, GLint depth, GLboolean unpackFlipY, \
GLboolean unpackPremultiplyAlpha, GLboolean unpackUnmultiplyAlpha); \
/* GL_ANGLE_program_binary */ \
/* GL_ANGLE_request_extension */ \
void requestExtension(const GLchar *name); \
/* GL_ANGLE_robust_client_memory */ \
......
......@@ -114,7 +114,9 @@ void WriteStringParamReplay(std::ostream &out, const ParamCapture &param)
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;
......@@ -707,11 +709,11 @@ void FrameCapture::writeCallReplay(const CallCapture &call,
{
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)
{
callOut << GLbitfieldToString(param.enumGroup, param.value.GLbitfieldVal);
OutputGLbitfieldString(callOut, param.enumGroup, param.value.GLbitfieldVal);
}
else
{
......
......@@ -163,6 +163,8 @@ angle::CallCapture CaptureMultiDrawElementsInstancedANGLE(const Context *context
const GLsizei *instanceCounts,
GLsizei drawcount);
// GL_ANGLE_program_binary
// GL_ANGLE_provoking_vertex
angle::CallCapture CaptureProvokingVertexANGLE(const Context *context,
bool isCallValid,
......
......@@ -11,6 +11,7 @@
#ifndef LIBANGLE_GL_ENUM_UTILS_AUTOGEN_H_
#define LIBANGLE_GL_ENUM_UTILS_AUTOGEN_H_
#include <ostream>
#include <string>
#include "common/PackedGLEnums_autogen.h"
......@@ -225,6 +226,10 @@ const char *GLenumToString(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
#endif // LIBANGLE_GL_ENUM_UTILS_AUTOGEN_H_
......@@ -141,6 +141,8 @@ bool ValidateMultiDrawElementsInstancedANGLE(Context *context,
const GLsizei *instanceCounts,
GLsizei drawcount);
// GL_ANGLE_program_binary
// GL_ANGLE_provoking_vertex
bool ValidateProvokingVertexANGLE(Context *context, ProvokingVertexConvention modePacked);
......
......@@ -547,6 +547,8 @@ void GL_APIENTRY MultiDrawElementsInstancedANGLE(GLenum mode,
}
}
// GL_ANGLE_program_binary
// GL_ANGLE_provoking_vertex
void GL_APIENTRY ProvokingVertexANGLE(GLenum mode)
{
......@@ -133,6 +133,8 @@ ANGLE_EXPORT void GL_APIENTRY MultiDrawElementsInstancedANGLE(GLenum mode,
const GLsizei *instanceCounts,
GLsizei drawcount);
// GL_ANGLE_program_binary
// GL_ANGLE_provoking_vertex
ANGLE_EXPORT void GL_APIENTRY ProvokingVertexANGLE(GLenum mode);
......
......@@ -2593,6 +2593,8 @@ void GL_APIENTRY glMultiDrawElementsInstancedANGLE(GLenum mode,
drawcount);
}
// GL_ANGLE_program_binary
// GL_ANGLE_provoking_vertex
void GL_APIENTRY glProvokingVertexANGLE(GLenum mode)
{
......
......@@ -442,6 +442,8 @@ EXPORTS
glMultiDrawElementsANGLE
glMultiDrawElementsInstancedANGLE
; GL_ANGLE_program_binary
; GL_ANGLE_provoking_vertex
glProvokingVertexANGLE
......
......@@ -442,6 +442,8 @@ EXPORTS
glMultiDrawElementsANGLE
glMultiDrawElementsInstancedANGLE
; GL_ANGLE_program_binary
; GL_ANGLE_provoking_vertex
glProvokingVertexANGLE
......
......@@ -442,6 +442,8 @@ EXPORTS
glMultiDrawElementsANGLE
glMultiDrawElementsInstancedANGLE
; GL_ANGLE_program_binary
; GL_ANGLE_provoking_vertex
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