Commit e431aaa1 by Jonah Ryan-Davis Committed by Commit Bot

Rename EGL_ANGLE_workaround_control to EGL_ANGLE_feature_control.

For consistency, call these ANGLE "features", a subset of which may be workarounds. Also, whether the feature is enabled/disabled should be publically visible as "status". Bug: angleproject:1621 Change-Id: I0de90a932fbfe1fc9b59138153d616d29fa7268b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1643410Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Jonah Ryan-Davis <jonahr@google.com>
parent 071d2a44
Name
ANGLE_workaround_control
EGL_ANGLE_feature_control
Name Strings
EGL_ANGLE_workaround_control
EGL_ANGLE_feature_control
Contributors
......@@ -40,10 +40,10 @@ Dependencies
Overview
This extension adds two methods to query arrays holding
information about the available workarounds for a given device.
information about the available features for a given device.
One method is used to query the total count of available
workarounds. Another method is used to query a string property
of an individual workaround given the workaround index.
features. Another method is used to query a string property
of an individual feature given the feature's index.
IP Status
......@@ -69,15 +69,15 @@ New Tokens
Accepted as a queried <name> in eglQueryStringiANGLE:
EGL_WORKAROUND_NAME_ANGLE 0x3460
EGL_WORKAROUND_CATEGORY_ANGLE 0x3461
EGL_WORKAROUND_DESCRIPTION_ANGLE 0x3462
EGL_WORKAROUND_BUG_ANGLE 0x3463
EGL_WORKAROUND_ENABLED_ANGLE 0x3464
EGL_FEATURE_NAME_ANGLE 0x3460
EGL_FEATURE_CATEGORY_ANGLE 0x3461
EGL_FEATURE_DESCRIPTION_ANGLE 0x3462
EGL_FEATURE_BUG_ANGLE 0x3463
EGL_FEATURE_STATUS_ANGLE 0x3464
Accepted as a queried <attribute> in eglQueryDisplayAttribANGLE
EGL_WORKAROUND_COUNT_ANGLE 0x3465
EGL_FEATURE_COUNT_ANGLE 0x3465
Add the following to the end of section 3.3 "EGL Queries":
......@@ -87,26 +87,26 @@ Add the following to the end of section 3.3 "EGL Queries":
eGLQueryStringiANGLE returns a pointer to a static, zero-
terminated string describing some aspect of the EGL
implementation running on the specified display, from an array of
strings. name may be one of EGL_WORKAROUND_NAME_ANGLE,
EGL_WORKAROUND_CATEGORY_ANGLE, EGL_WORKAROUND_DESCRIPTION_ANGLE,
EGL_WORKAROUND_BUG_ANGLE, or EGL_WORKAROUND_ENABLED_ANGLE. Index
strings. name may be one of EGL_FEATURE_NAME_ANGLE,
EGL_FEATURE_CATEGORY_ANGLE, EGL_FEATURE_DESCRIPTION_ANGLE,
EGL_FEATURE_BUG_ANGLE, or EGL_FEATURE_STATUS_ANGLE. Index
must be a valid index to access into the array of strings.
The EGL_WORKAROUND_NAME_ANGLE array contains strings that
describe the name of each workaround available in the display.
The EGL_WORKAROUND_CATEGORY_ANGLE array contains strings
The EGL_FEATURE_NAME_ANGLE array contains strings that
describe the name of each feature available in the display.
The EGL_FEATURE_CATEGORY_ANGLE array contains strings
with corresponding indices to the array of names. Each string
describes the category of the workaround at the specified index.
The EGL_WORKAROUND_DESCRIPTION_ANGLE array contains strings
describes the category of the feature at the specified index.
The EGL_FEATURE_DESCRIPTION_ANGLE array contains strings
with corresponding indices to the array of names. Each string
describes the workaround at the specified index.
The EGL_WORKAROUND_BUG_ANGLE array contains strings
describes the feature at the specified index.
The EGL_FEATURE_BUG_ANGLE array contains strings
with corresponding indices to the array of names. Each string
describes the bug related to the workaround at the specified
describes the bug related to the feature at the specified
index.
The EGL_WORKAROUND_ENABLED_ANGLE array contains strings
The EGL_FEATURE_STATUS_ANGLE array contains strings
with corresponding indices to the array of names. Each string has
the value "true" if the workaround is currently enabled, or
"false" if the workaround is currently disabled.
the value "enabled" if the feature is currently enabled, or
"disabled" if the feature is currently disabled.
Errors
......@@ -127,8 +127,8 @@ Add a section "3.4 Display Attributes" after "3.3 EGL Versioning"
EGLAttrib *value);
On success, EGL_TRUE is returned.
If <attribute> is EGL_WORKAROUND_COUNT_ANGLE, the total count of
available workarounds is returned in <value>.
If <attribute> is EGL_FEATURE_COUNT_ANGLE, the total count of
available features is returned in <value>.
On failure, EGL_FALSE is returned.
An EGL_BAD_DISPLAY error is generated if dpy is not a valid
......
......@@ -209,21 +209,21 @@ EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncValuesCHROMIUM(EGLDisplay dpy,
#define EGL_HIGH_POWER_ANGLE 0x0002
#endif /* EGL_ANGLE_power_preference */
#ifndef EGL_ANGLE_workaround_control
#define EGL_ANGLE_workaround_control 1
#define EGL_WORKAROUND_NAME_ANGLE 0x3460
#define EGL_WORKAROUND_CATEGORY_ANGLE 0x3461
#define EGL_WORKAROUND_DESCRIPTION_ANGLE 0x3462
#define EGL_WORKAROUND_BUG_ANGLE 0x3463
#define EGL_WORKAROUND_ENABLED_ANGLE 0x3464
#define EGL_WORKAROUND_COUNT_ANGLE 0x3465
#ifndef EGL_ANGLE_feature_control
#define EGL_ANGLE_feature_control 1
#define EGL_FEATURE_NAME_ANGLE 0x3460
#define EGL_FEATURE_CATEGORY_ANGLE 0x3461
#define EGL_FEATURE_DESCRIPTION_ANGLE 0x3462
#define EGL_FEATURE_BUG_ANGLE 0x3463
#define EGL_FEATURE_STATUS_ANGLE 0x3464
#define EGL_FEATURE_COUNT_ANGLE 0x3465
typedef const char *(EGLAPIENTRYP PFNEGLQUERYSTRINGIANGLEPROC) (EGLDisplay dpy, EGLint name, EGLint index);
typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBANGLEPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib *value);
#ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI const char *EGLAPIENTRY eglQueryStringiANGLE(EGLDisplay dpy, EGLint name, EGLint index);
EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribANGLE(EGLDisplay dpy, EGLint attribute, EGLAttrib *value);
#endif
#endif /* EGL_ANGLE_workaround_control */
#endif /* EGL_ANGLE_feature_control */
// clang-format on
......
......@@ -32,6 +32,7 @@ constexpr char kFeatureCategoryD3DWorkarounds[] = "D3D workarounds";
constexpr char kFeatureCategoryD3DCompilerWorkarounds[] = "D3D compiler workarounds";
constexpr char kFeatureCategoryVulkanWorkarounds[] = "Vulkan workarounds";
constexpr char kFeatureCategoryVulkanFeatures[] = "Vulkan features";
constexpr char kFeatureCategoryUnknown[] = "Unknown";
inline const char *FeatureCategoryToString(const FeatureCategory &fc)
{
......@@ -62,11 +63,23 @@ inline const char *FeatureCategoryToString(const FeatureCategory &fc)
break;
default:
return "Unknown";
return kFeatureCategoryUnknown;
break;
}
}
constexpr char kFeatureStatusEnabled[] = "enabled";
constexpr char kFeatureStatusDisabled[] = "disabled";
inline const char *FeatureStatusToString(const bool &status)
{
if (status)
{
return kFeatureStatusEnabled;
}
return kFeatureStatusDisabled;
}
struct Feature;
using FeatureMap = std::map<std::string, Feature *>;
......
......@@ -90,6 +90,12 @@
<command name="eglReleaseDeviceANGLE"/>
</require>
</extension>
<extension name="EGL_ANGLE_feature_control" supported="egl">
<require>
<command name="eglQueryStringiANGLE"/>
<command name="eglQueryDisplayAttribANGLE"/>
</require>
</extension>
<extension name="EGL_ANGLE_stream_producer_d3d_texture" supported="egl">
<require>
<command name="eglCreateStreamProducerD3DTextureANGLE"/>
......@@ -109,11 +115,5 @@
<command name="eglProgramCacheResizeANGLE"/>
</require>
</extension>
<extension name="EGL_ANGLE_workaround_control" supported="egl">
<require>
<command name="eglQueryStringiANGLE"/>
<command name="eglQueryDisplayAttribANGLE"/>
</require>
</extension>
</extensions>
</registry>
......@@ -80,12 +80,12 @@ supported_egl_extensions = [
"EGL_ANGLE_d3d_share_handle_client_buffer",
"EGL_ANGLE_device_creation",
"EGL_ANGLE_device_d3d",
"EGL_ANGLE_feature_control",
"EGL_ANGLE_program_cache_control",
"EGL_ANGLE_query_surface_pointer",
"EGL_ANGLE_stream_producer_d3d_texture",
"EGL_ANGLE_surface_d3d_texture_2d_share_handle",
"EGL_ANGLE_window_fixed_size",
"EGL_ANGLE_workaround_control",
"EGL_CHROMIUM_get_sync_values",
"EGL_EXT_create_context_robustness",
"EGL_EXT_device_query",
......
......@@ -90,7 +90,7 @@
"GL/EGL entry points:scripts/egl.xml":
"842e24514c4cfe09fba703c17a0fd292",
"GL/EGL entry points:scripts/egl_angle_ext.xml":
"5a960e91d1b0837828638e19db1b685a",
"fc2e249239fb1365f6d145cdf1a3cfcf",
"GL/EGL entry points:scripts/entry_point_packed_gl_enums.json":
"28238b0f52826c3794eaa1aa940238bf",
"GL/EGL entry points:scripts/generate_entry_points.py":
......@@ -100,7 +100,7 @@
"GL/EGL entry points:scripts/gl_angle_ext.xml":
"11e1eb2cbe51ae6e7b8705d3506846d5",
"GL/EGL entry points:scripts/registry_xml.py":
"79d48343cb33f2f534720f84dcba1b4f",
"7f043b31380aa2fb0c82e65f802f8cf1",
"GL/EGL entry points:src/libANGLE/Context_gles_1_0_autogen.h":
"fad4ec629b41e9d97ff57a132ad946cb",
"GL/EGL entry points:src/libANGLE/validationES1_autogen.h":
......@@ -138,25 +138,25 @@
"GL/EGL entry points:src/libGLESv2/libGLESv2_autogen.cpp":
"c99457bcd86a5b94c61185c1bcddfdcb",
"GL/EGL entry points:src/libGLESv2/libGLESv2_autogen.def":
"054028c2a9caa4b303fc65e18e0320bc",
"cc194ee102fd102ec7f52df0877053c1",
"GL/EGL/WGL loader:scripts/egl.xml":
"842e24514c4cfe09fba703c17a0fd292",
"GL/EGL/WGL loader:scripts/egl_angle_ext.xml":
"5a960e91d1b0837828638e19db1b685a",
"fc2e249239fb1365f6d145cdf1a3cfcf",
"GL/EGL/WGL loader:scripts/generate_loader.py":
"5a7cd014230fe04664d9613e65399d42",
"GL/EGL/WGL loader:scripts/registry_xml.py":
"79d48343cb33f2f534720f84dcba1b4f",
"7f043b31380aa2fb0c82e65f802f8cf1",
"GL/EGL/WGL loader:scripts/wgl.xml":
"aa96419c582af2f6673430e2847693f4",
"GL/EGL/WGL loader:src/libEGL/egl_loader_autogen.cpp":
"aa736e910cee09355f7ac646dd5e8576",
"0ebe5668fba36b5b4ad5abb64c21ca32",
"GL/EGL/WGL loader:src/libEGL/egl_loader_autogen.h":
"bdd2e54a7b23b9616efa14e0b4cc7169",
"adfee42620344b47b5f2c934e4c58e37",
"GL/EGL/WGL loader:util/egl_loader_autogen.cpp":
"c7ee1ebf9d35e29d3ae907f3b71c3b74",
"5e2ea1c54813036aa363eac2c1388f4a",
"GL/EGL/WGL loader:util/egl_loader_autogen.h":
"25c81800fe7efbc656570355824bf71b",
"a4f0d640554d9c2b4f90f1f2271a1104",
"GL/EGL/WGL loader:util/gles_loader_autogen.cpp":
"34056ce8d9c18d3cdcd23e16b94508c4",
"GL/EGL/WGL loader:util/gles_loader_autogen.h":
......@@ -418,7 +418,7 @@
"proc table:src/libGLESv2/proc_table_autogen.cpp":
"7cf8dbd79fddffd89d2348d1210ba4ca",
"proc table:src/libGLESv2/proc_table_data.json":
"d92a9202be39597e148545b6c0a7abb3",
"4dfc7f64b7a44b93c83504d1c5332814",
"uniform type:src/common/gen_uniform_type_table.py":
"9dd389f2b5793ba635169d61cef2dde9",
"uniform type:src/common/uniform_type_info_autogen.cpp":
......
......@@ -1410,7 +1410,7 @@ DisplayExtensions::DisplayExtensions()
getFrameTimestamps(false),
recordable(false),
powerPreference(false),
workaroundControlANGLE(false)
featureControlANGLE(false)
{}
std::vector<std::string> DisplayExtensions::getStrings() const
......@@ -1465,7 +1465,7 @@ std::vector<std::string> DisplayExtensions::getStrings() const
InsertExtensionString("EGL_ANDROID_get_frame_timestamps", getFrameTimestamps, &extensionStrings);
InsertExtensionString("EGL_ANDROID_recordable", recordable, &extensionStrings);
InsertExtensionString("EGL_ANGLE_power_preference", powerPreference, &extensionStrings);
InsertExtensionString("EGL_ANGLE_workaround_control", workaroundControlANGLE, &extensionStrings);
InsertExtensionString("EGL_ANGLE_feature_control", featureControlANGLE, &extensionStrings);
// TODO(jmadill): Enable this when complete.
//InsertExtensionString("KHR_create_context_no_error", createContextNoError, &extensionStrings);
// clang-format on
......
......@@ -884,8 +884,8 @@ struct DisplayExtensions
// EGL_ANGLE_power_preference
bool powerPreference;
// EGL_ANGLE_workaround_control
bool workaroundControlANGLE;
// EGL_ANGLE_feature_control
bool featureControlANGLE;
};
struct DeviceExtensions
......
......@@ -1247,8 +1247,8 @@ void Display::initDisplayExtensions()
// that ANativeWindow is not recordable.
mDisplayExtensions.recordable = true;
// EGL_ANGLE_workaround_control is implemented on all backends.
mDisplayExtensions.workaroundControlANGLE = true;
// EGL_ANGLE_feature_control is implemented on all backends.
mDisplayExtensions.featureControlANGLE = true;
mDisplayExtensionString = GenerateExtensionsString(mDisplayExtensions);
}
......@@ -1448,27 +1448,20 @@ const char *Display::queryStringi(const EGLint name, const EGLint index)
const char *result = nullptr;
switch (name)
{
case EGL_WORKAROUND_NAME_ANGLE:
case EGL_FEATURE_NAME_ANGLE:
result = mFeatures[index]->name;
break;
case EGL_WORKAROUND_CATEGORY_ANGLE:
case EGL_FEATURE_CATEGORY_ANGLE:
result = angle::FeatureCategoryToString(mFeatures[index]->category);
break;
case EGL_WORKAROUND_DESCRIPTION_ANGLE:
case EGL_FEATURE_DESCRIPTION_ANGLE:
result = mFeatures[index]->description;
break;
case EGL_WORKAROUND_BUG_ANGLE:
case EGL_FEATURE_BUG_ANGLE:
result = mFeatures[index]->bug;
break;
case EGL_WORKAROUND_ENABLED_ANGLE:
if (mFeatures[index]->enabled)
{
result = "true";
}
else
{
result = "false";
}
case EGL_FEATURE_STATUS_ANGLE:
result = angle::FeatureStatusToString(mFeatures[index]->enabled);
break;
default:
UNREACHABLE();
......@@ -1486,7 +1479,7 @@ EGLAttrib Display::queryAttrib(const EGLint attribute)
value = reinterpret_cast<EGLAttrib>(mDevice);
break;
case EGL_WORKAROUND_COUNT_ANGLE:
case EGL_FEATURE_COUNT_ANGLE:
value = mFeatures.size();
break;
......
......@@ -3732,9 +3732,9 @@ Error ValidateQueryStringiANGLE(const Display *display, EGLint name, EGLint inde
{
ANGLE_TRY(ValidateDisplay(display));
if (!display->getExtensions().workaroundControlANGLE)
if (!display->getExtensions().featureControlANGLE)
{
return EglBadDisplay() << "EGL_ANGLE_workaround_control extension is not available.";
return EglBadDisplay() << "EGL_ANGLE_feature_control extension is not available.";
}
if (index < 0)
......@@ -3744,11 +3744,11 @@ Error ValidateQueryStringiANGLE(const Display *display, EGLint name, EGLint inde
switch (name)
{
case EGL_WORKAROUND_NAME_ANGLE:
case EGL_WORKAROUND_CATEGORY_ANGLE:
case EGL_WORKAROUND_DESCRIPTION_ANGLE:
case EGL_WORKAROUND_BUG_ANGLE:
case EGL_WORKAROUND_ENABLED_ANGLE:
case EGL_FEATURE_NAME_ANGLE:
case EGL_FEATURE_CATEGORY_ANGLE:
case EGL_FEATURE_DESCRIPTION_ANGLE:
case EGL_FEATURE_BUG_ANGLE:
case EGL_FEATURE_STATUS_ANGLE:
break;
default:
return EglBadParameter() << "name is not valid.";
......@@ -3775,11 +3775,10 @@ Error ValidateQueryDisplayAttribBase(const Display *display, const EGLint attrib
}
break;
case EGL_WORKAROUND_COUNT_ANGLE:
if (!display->getExtensions().workaroundControlANGLE)
case EGL_FEATURE_COUNT_ANGLE:
if (!display->getExtensions().featureControlANGLE)
{
return EglBadDisplay()
<< "EGL_ANGLE_workaround_control extension is not available.";
return EglBadDisplay() << "EGL_ANGLE_feature_control extension is not available.";
}
break;
......
......@@ -63,6 +63,8 @@ PFNEGLGETNEXTFRAMEIDANDROIDPROC EGL_GetNextFrameIdANDROID;
PFNEGLPRESENTATIONTIMEANDROIDPROC EGL_PresentationTimeANDROID;
PFNEGLCREATEDEVICEANGLEPROC EGL_CreateDeviceANGLE;
PFNEGLRELEASEDEVICEANGLEPROC EGL_ReleaseDeviceANGLE;
PFNEGLQUERYDISPLAYATTRIBANGLEPROC EGL_QueryDisplayAttribANGLE;
PFNEGLQUERYSTRINGIANGLEPROC EGL_QueryStringiANGLE;
PFNEGLPROGRAMCACHEGETATTRIBANGLEPROC EGL_ProgramCacheGetAttribANGLE;
PFNEGLPROGRAMCACHEPOPULATEANGLEPROC EGL_ProgramCachePopulateANGLE;
PFNEGLPROGRAMCACHEQUERYANGLEPROC EGL_ProgramCacheQueryANGLE;
......@@ -70,8 +72,6 @@ PFNEGLPROGRAMCACHERESIZEANGLEPROC EGL_ProgramCacheResizeANGLE;
PFNEGLQUERYSURFACEPOINTERANGLEPROC EGL_QuerySurfacePointerANGLE;
PFNEGLCREATESTREAMPRODUCERD3DTEXTUREANGLEPROC EGL_CreateStreamProducerD3DTextureANGLE;
PFNEGLSTREAMPOSTD3DTEXTUREANGLEPROC EGL_StreamPostD3DTextureANGLE;
PFNEGLQUERYDISPLAYATTRIBANGLEPROC EGL_QueryDisplayAttribANGLE;
PFNEGLQUERYSTRINGIANGLEPROC EGL_QueryStringiANGLE;
PFNEGLGETSYNCVALUESCHROMIUMPROC EGL_GetSyncValuesCHROMIUM;
PFNEGLQUERYDEVICEATTRIBEXTPROC EGL_QueryDeviceAttribEXT;
PFNEGLQUERYDEVICESTRINGEXTPROC EGL_QueryDeviceStringEXT;
......@@ -181,6 +181,10 @@ void LoadEGL_EGL(LoadProc loadProc)
reinterpret_cast<PFNEGLCREATEDEVICEANGLEPROC>(loadProc("EGL_CreateDeviceANGLE"));
EGL_ReleaseDeviceANGLE =
reinterpret_cast<PFNEGLRELEASEDEVICEANGLEPROC>(loadProc("EGL_ReleaseDeviceANGLE"));
EGL_QueryDisplayAttribANGLE = reinterpret_cast<PFNEGLQUERYDISPLAYATTRIBANGLEPROC>(
loadProc("EGL_QueryDisplayAttribANGLE"));
EGL_QueryStringiANGLE =
reinterpret_cast<PFNEGLQUERYSTRINGIANGLEPROC>(loadProc("EGL_QueryStringiANGLE"));
EGL_ProgramCacheGetAttribANGLE = reinterpret_cast<PFNEGLPROGRAMCACHEGETATTRIBANGLEPROC>(
loadProc("EGL_ProgramCacheGetAttribANGLE"));
EGL_ProgramCachePopulateANGLE = reinterpret_cast<PFNEGLPROGRAMCACHEPOPULATEANGLEPROC>(
......@@ -196,10 +200,6 @@ void LoadEGL_EGL(LoadProc loadProc)
loadProc("EGL_CreateStreamProducerD3DTextureANGLE"));
EGL_StreamPostD3DTextureANGLE = reinterpret_cast<PFNEGLSTREAMPOSTD3DTEXTUREANGLEPROC>(
loadProc("EGL_StreamPostD3DTextureANGLE"));
EGL_QueryDisplayAttribANGLE = reinterpret_cast<PFNEGLQUERYDISPLAYATTRIBANGLEPROC>(
loadProc("EGL_QueryDisplayAttribANGLE"));
EGL_QueryStringiANGLE =
reinterpret_cast<PFNEGLQUERYSTRINGIANGLEPROC>(loadProc("EGL_QueryStringiANGLE"));
EGL_GetSyncValuesCHROMIUM =
reinterpret_cast<PFNEGLGETSYNCVALUESCHROMIUMPROC>(loadProc("EGL_GetSyncValuesCHROMIUM"));
EGL_QueryDeviceAttribEXT =
......
......@@ -67,6 +67,8 @@ extern PFNEGLGETNEXTFRAMEIDANDROIDPROC EGL_GetNextFrameIdANDROID;
extern PFNEGLPRESENTATIONTIMEANDROIDPROC EGL_PresentationTimeANDROID;
extern PFNEGLCREATEDEVICEANGLEPROC EGL_CreateDeviceANGLE;
extern PFNEGLRELEASEDEVICEANGLEPROC EGL_ReleaseDeviceANGLE;
extern PFNEGLQUERYDISPLAYATTRIBANGLEPROC EGL_QueryDisplayAttribANGLE;
extern PFNEGLQUERYSTRINGIANGLEPROC EGL_QueryStringiANGLE;
extern PFNEGLPROGRAMCACHEGETATTRIBANGLEPROC EGL_ProgramCacheGetAttribANGLE;
extern PFNEGLPROGRAMCACHEPOPULATEANGLEPROC EGL_ProgramCachePopulateANGLE;
extern PFNEGLPROGRAMCACHEQUERYANGLEPROC EGL_ProgramCacheQueryANGLE;
......@@ -74,8 +76,6 @@ extern PFNEGLPROGRAMCACHERESIZEANGLEPROC EGL_ProgramCacheResizeANGLE;
extern PFNEGLQUERYSURFACEPOINTERANGLEPROC EGL_QuerySurfacePointerANGLE;
extern PFNEGLCREATESTREAMPRODUCERD3DTEXTUREANGLEPROC EGL_CreateStreamProducerD3DTextureANGLE;
extern PFNEGLSTREAMPOSTD3DTEXTUREANGLEPROC EGL_StreamPostD3DTextureANGLE;
extern PFNEGLQUERYDISPLAYATTRIBANGLEPROC EGL_QueryDisplayAttribANGLE;
extern PFNEGLQUERYSTRINGIANGLEPROC EGL_QueryStringiANGLE;
extern PFNEGLGETSYNCVALUESCHROMIUMPROC EGL_GetSyncValuesCHROMIUM;
extern PFNEGLQUERYDEVICEATTRIBEXTPROC EGL_QueryDeviceAttribEXT;
extern PFNEGLQUERYDEVICESTRINGEXTPROC EGL_QueryDeviceStringEXT;
......
......@@ -367,7 +367,7 @@ EGLBoolean EGLAPIENTRY EGL_QueryDisplayAttribEXT(EGLDisplay dpy, EGLint attribut
return EGL_TRUE;
}
// EGL_ANGLE_workaround_control
// EGL_ANGLE_feature_control
EGLBoolean EGLAPIENTRY EGL_QueryDisplayAttribANGLE(EGLDisplay dpy,
EGLint attribute,
EGLAttrib *value)
......@@ -1421,6 +1421,7 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_GetFrameTimestampsANDROID(EGLDisplay dpy
return EGL_TRUE;
}
// EGL_ANGLE_feature_control
ANGLE_EXPORT const char *EGLAPIENTRY EGL_QueryStringiANGLE(EGLDisplay dpy,
EGLint name,
EGLint index)
......
......@@ -47,7 +47,7 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_QueryDisplayAttribEXT(EGLDisplay dpy,
EGLint attribute,
EGLAttrib *value);
// EGL_ANGLE_workaround_control
// EGL_ANGLE_feature_control
ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_QueryDisplayAttribANGLE(EGLDisplay dpy,
EGLint attribute,
EGLAttrib *value);
......@@ -205,7 +205,7 @@ ANGLE_EXPORT EGLBoolean EGLAPIENTRY EGL_GetFrameTimestampsANDROID(EGLDisplay dpy
const EGLint *timestamps,
EGLnsecsANDROID *values);
// EGL_ANGLE_workaround_control
// EGL_ANGLE_feature_control
ANGLE_EXPORT const char *EGLAPIENTRY EGL_QueryStringiANGLE(EGLDisplay dpy,
EGLint name,
EGLint index);
......
......@@ -1476,6 +1476,10 @@ EXPORTS
EGL_CreateDeviceANGLE
EGL_ReleaseDeviceANGLE
; EGL_ANGLE_feature_control
EGL_QueryDisplayAttribANGLE
EGL_QueryStringiANGLE
; EGL_ANGLE_program_cache_control
EGL_ProgramCacheGetAttribANGLE
EGL_ProgramCachePopulateANGLE
......@@ -1489,10 +1493,6 @@ EXPORTS
EGL_CreateStreamProducerD3DTextureANGLE
EGL_StreamPostD3DTextureANGLE
; EGL_ANGLE_workaround_control
EGL_QueryDisplayAttribANGLE
EGL_QueryStringiANGLE
; EGL_CHROMIUM_get_sync_values
EGL_GetSyncValuesCHROMIUM
......
......@@ -1001,7 +1001,7 @@
"GL_CHROMIUM_lose_context": [
"glLoseContextCHROMIUM"
],
"EGL_ANGLE_workaround_control": [
"EGL_ANGLE_feature_control": [
"eglQueryStringiANGLE",
"eglQueryDisplayAttribANGLE"
]
......
......@@ -3,7 +3,7 @@
# found in the LICENSE file.
angle_white_box_tests_sources = [
"egl_tests/EGLWorkaroundControlTest.cpp",
"egl_tests/EGLFeatureControlTest.cpp",
"util_tests/PrintSystemInfoTest.cpp",
"test_utils/angle_test_configs.cpp",
"test_utils/angle_test_configs.h",
......
......@@ -4,7 +4,7 @@
// found in the LICENSE file.
//
// Tests the eglQueryStringiANGLE and eglQueryDisplayAttribANGLE functions exposed by the
// extension EGL_ANGLE_workaround_control.
// extension EGL_ANGLE_feature_control.
#include <gtest/gtest.h>
......@@ -13,93 +13,87 @@
using namespace angle;
class EGLWorkaroundControlTest : public ANGLETest
class EGLFeatureControlTest : public ANGLETest
{
public:
void testSetUp() override
{
ASSERT_TRUE(IsEGLDisplayExtensionEnabled(getEGLWindow()->getDisplay(),
"EGL_ANGLE_workaround_control"));
"EGL_ANGLE_feature_control"));
}
void testTearDown() override {}
};
// Ensure eglQueryStringiANGLE generates EGL_BAD_DISPLAY if the display passed in is invalid.
TEST_P(EGLWorkaroundControlTest, InvalidDisplay)
TEST_P(EGLFeatureControlTest, InvalidDisplay)
{
EXPECT_EQ(nullptr, eglQueryStringiANGLE(EGL_NO_DISPLAY, EGL_WORKAROUND_NAME_ANGLE, 0));
EXPECT_EQ(nullptr, eglQueryStringiANGLE(EGL_NO_DISPLAY, EGL_FEATURE_NAME_ANGLE, 0));
EXPECT_EGL_ERROR(EGL_BAD_DISPLAY);
}
// Ensure eglQueryStringiANGLE generates EGL_BAD_PARAMETER if the index is negative.
TEST_P(EGLWorkaroundControlTest, NegativeIndex)
TEST_P(EGLFeatureControlTest, NegativeIndex)
{
EXPECT_EQ(nullptr,
eglQueryStringiANGLE(getEGLWindow()->getDisplay(), EGL_WORKAROUND_NAME_ANGLE, -1));
eglQueryStringiANGLE(getEGLWindow()->getDisplay(), EGL_FEATURE_NAME_ANGLE, -1));
EXPECT_EGL_ERROR(EGL_BAD_PARAMETER);
}
// Ensure eglQueryStringiANGLE generates EGL_BAD_PARAMETER if the index is out of bounds.
TEST_P(EGLWorkaroundControlTest, IndexOutOfBounds)
TEST_P(EGLFeatureControlTest, IndexOutOfBounds)
{
EGLDisplay dpy = getEGLWindow()->getDisplay();
egl::Display *display = static_cast<egl::Display *>(dpy);
EXPECT_EQ(nullptr,
eglQueryStringiANGLE(dpy, EGL_WORKAROUND_NAME_ANGLE, display->getFeatures().size()));
eglQueryStringiANGLE(dpy, EGL_FEATURE_NAME_ANGLE, display->getFeatures().size()));
EXPECT_EGL_ERROR(EGL_BAD_PARAMETER);
}
// Ensure eglQueryStringiANGLE generates EGL_BAD_PARAMETER if the name is not one of the valid
// options specified in the workaround.
TEST_P(EGLWorkaroundControlTest, InvalidName)
// options specified in EGL_ANGLE_feature_control.
TEST_P(EGLFeatureControlTest, InvalidName)
{
EXPECT_EQ(nullptr, eglQueryStringiANGLE(getEGLWindow()->getDisplay(), 100, 0));
EXPECT_EGL_ERROR(EGL_BAD_PARAMETER);
}
// For each valid name and index in the workaround description arrays, query the values and ensure
// For each valid name and index in the feature description arrays, query the values and ensure
// that no error is generated, and that the values match the correct values frim ANGLE's display's
// FeatureList.
TEST_P(EGLWorkaroundControlTest, QueryAll)
TEST_P(EGLFeatureControlTest, QueryAll)
{
EGLDisplay dpy = getEGLWindow()->getDisplay();
egl::Display *display = static_cast<egl::Display *>(dpy);
angle::FeatureList features = display->getFeatures();
for (size_t i = 0; i < features.size(); i++)
{
EXPECT_STREQ(features[i]->name, eglQueryStringiANGLE(dpy, EGL_WORKAROUND_NAME_ANGLE, i));
EXPECT_STREQ(features[i]->name, eglQueryStringiANGLE(dpy, EGL_FEATURE_NAME_ANGLE, i));
EXPECT_STREQ(FeatureCategoryToString(features[i]->category),
eglQueryStringiANGLE(dpy, EGL_WORKAROUND_CATEGORY_ANGLE, i));
eglQueryStringiANGLE(dpy, EGL_FEATURE_CATEGORY_ANGLE, i));
EXPECT_STREQ(features[i]->description,
eglQueryStringiANGLE(dpy, EGL_WORKAROUND_DESCRIPTION_ANGLE, i));
EXPECT_STREQ(features[i]->bug, eglQueryStringiANGLE(dpy, EGL_WORKAROUND_BUG_ANGLE, i));
if (features[i]->enabled)
{
EXPECT_STREQ("true", eglQueryStringiANGLE(dpy, EGL_WORKAROUND_ENABLED_ANGLE, i));
}
else
{
EXPECT_STREQ("false", eglQueryStringiANGLE(dpy, EGL_WORKAROUND_ENABLED_ANGLE, i));
}
eglQueryStringiANGLE(dpy, EGL_FEATURE_DESCRIPTION_ANGLE, i));
EXPECT_STREQ(features[i]->bug, eglQueryStringiANGLE(dpy, EGL_FEATURE_BUG_ANGLE, i));
EXPECT_STREQ(FeatureStatusToString(features[i]->enabled),
eglQueryStringiANGLE(dpy, EGL_FEATURE_STATUS_ANGLE, i));
ASSERT_EGL_SUCCESS();
}
}
// Ensure eglQueryDisplayAttribANGLE returns the correct number of workarounds when queried with
// attribute EGL_WORKAROUND_COUNT_ANGLE
TEST_P(EGLWorkaroundControlTest, WorkaroundCount)
// Ensure eglQueryDisplayAttribANGLE returns the correct number of features when queried with
// attribute EGL_FEATURE_COUNT_ANGLE
TEST_P(EGLFeatureControlTest, FeatureCount)
{
EGLDisplay dpy = getEGLWindow()->getDisplay();
egl::Display *display = static_cast<egl::Display *>(dpy);
EGLAttrib value = -1;
EXPECT_EQ(static_cast<EGLBoolean>(EGL_TRUE),
eglQueryDisplayAttribANGLE(dpy, EGL_WORKAROUND_COUNT_ANGLE, &value));
eglQueryDisplayAttribANGLE(dpy, EGL_FEATURE_COUNT_ANGLE, &value));
EXPECT_EQ(display->getFeatures().size(), static_cast<size_t>(value));
ASSERT_EGL_SUCCESS();
}
ANGLE_INSTANTIATE_TEST(EGLWorkaroundControlTest,
ANGLE_INSTANTIATE_TEST(EGLFeatureControlTest,
ES2_D3D9(),
ES2_D3D11(),
ES2_OPENGL(),
......
......@@ -64,6 +64,8 @@ ANGLE_UTIL_EXPORT PFNEGLGETNEXTFRAMEIDANDROIDPROC eglGetNextFrameIdANDROID;
ANGLE_UTIL_EXPORT PFNEGLPRESENTATIONTIMEANDROIDPROC eglPresentationTimeANDROID;
ANGLE_UTIL_EXPORT PFNEGLCREATEDEVICEANGLEPROC eglCreateDeviceANGLE;
ANGLE_UTIL_EXPORT PFNEGLRELEASEDEVICEANGLEPROC eglReleaseDeviceANGLE;
ANGLE_UTIL_EXPORT PFNEGLQUERYDISPLAYATTRIBANGLEPROC eglQueryDisplayAttribANGLE;
ANGLE_UTIL_EXPORT PFNEGLQUERYSTRINGIANGLEPROC eglQueryStringiANGLE;
ANGLE_UTIL_EXPORT PFNEGLPROGRAMCACHEGETATTRIBANGLEPROC eglProgramCacheGetAttribANGLE;
ANGLE_UTIL_EXPORT PFNEGLPROGRAMCACHEPOPULATEANGLEPROC eglProgramCachePopulateANGLE;
ANGLE_UTIL_EXPORT PFNEGLPROGRAMCACHEQUERYANGLEPROC eglProgramCacheQueryANGLE;
......@@ -72,8 +74,6 @@ ANGLE_UTIL_EXPORT PFNEGLQUERYSURFACEPOINTERANGLEPROC eglQuerySurfacePointerANGLE
ANGLE_UTIL_EXPORT PFNEGLCREATESTREAMPRODUCERD3DTEXTUREANGLEPROC
eglCreateStreamProducerD3DTextureANGLE;
ANGLE_UTIL_EXPORT PFNEGLSTREAMPOSTD3DTEXTUREANGLEPROC eglStreamPostD3DTextureANGLE;
ANGLE_UTIL_EXPORT PFNEGLQUERYDISPLAYATTRIBANGLEPROC eglQueryDisplayAttribANGLE;
ANGLE_UTIL_EXPORT PFNEGLQUERYSTRINGIANGLEPROC eglQueryStringiANGLE;
ANGLE_UTIL_EXPORT PFNEGLGETSYNCVALUESCHROMIUMPROC eglGetSyncValuesCHROMIUM;
ANGLE_UTIL_EXPORT PFNEGLQUERYDEVICEATTRIBEXTPROC eglQueryDeviceAttribEXT;
ANGLE_UTIL_EXPORT PFNEGLQUERYDEVICESTRINGEXTPROC eglQueryDeviceStringEXT;
......@@ -185,6 +185,10 @@ void LoadEGL(LoadProc loadProc)
reinterpret_cast<PFNEGLCREATEDEVICEANGLEPROC>(loadProc("eglCreateDeviceANGLE"));
eglReleaseDeviceANGLE =
reinterpret_cast<PFNEGLRELEASEDEVICEANGLEPROC>(loadProc("eglReleaseDeviceANGLE"));
eglQueryDisplayAttribANGLE =
reinterpret_cast<PFNEGLQUERYDISPLAYATTRIBANGLEPROC>(loadProc("eglQueryDisplayAttribANGLE"));
eglQueryStringiANGLE =
reinterpret_cast<PFNEGLQUERYSTRINGIANGLEPROC>(loadProc("eglQueryStringiANGLE"));
eglProgramCacheGetAttribANGLE = reinterpret_cast<PFNEGLPROGRAMCACHEGETATTRIBANGLEPROC>(
loadProc("eglProgramCacheGetAttribANGLE"));
eglProgramCachePopulateANGLE = reinterpret_cast<PFNEGLPROGRAMCACHEPOPULATEANGLEPROC>(
......@@ -200,10 +204,6 @@ void LoadEGL(LoadProc loadProc)
loadProc("eglCreateStreamProducerD3DTextureANGLE"));
eglStreamPostD3DTextureANGLE = reinterpret_cast<PFNEGLSTREAMPOSTD3DTEXTUREANGLEPROC>(
loadProc("eglStreamPostD3DTextureANGLE"));
eglQueryDisplayAttribANGLE =
reinterpret_cast<PFNEGLQUERYDISPLAYATTRIBANGLEPROC>(loadProc("eglQueryDisplayAttribANGLE"));
eglQueryStringiANGLE =
reinterpret_cast<PFNEGLQUERYSTRINGIANGLEPROC>(loadProc("eglQueryStringiANGLE"));
eglGetSyncValuesCHROMIUM =
reinterpret_cast<PFNEGLGETSYNCVALUESCHROMIUMPROC>(loadProc("eglGetSyncValuesCHROMIUM"));
eglQueryDeviceAttribEXT =
......
......@@ -71,6 +71,8 @@ ANGLE_UTIL_EXPORT extern PFNEGLGETNEXTFRAMEIDANDROIDPROC eglGetNextFrameIdANDROI
ANGLE_UTIL_EXPORT extern PFNEGLPRESENTATIONTIMEANDROIDPROC eglPresentationTimeANDROID;
ANGLE_UTIL_EXPORT extern PFNEGLCREATEDEVICEANGLEPROC eglCreateDeviceANGLE;
ANGLE_UTIL_EXPORT extern PFNEGLRELEASEDEVICEANGLEPROC eglReleaseDeviceANGLE;
ANGLE_UTIL_EXPORT extern PFNEGLQUERYDISPLAYATTRIBANGLEPROC eglQueryDisplayAttribANGLE;
ANGLE_UTIL_EXPORT extern PFNEGLQUERYSTRINGIANGLEPROC eglQueryStringiANGLE;
ANGLE_UTIL_EXPORT extern PFNEGLPROGRAMCACHEGETATTRIBANGLEPROC eglProgramCacheGetAttribANGLE;
ANGLE_UTIL_EXPORT extern PFNEGLPROGRAMCACHEPOPULATEANGLEPROC eglProgramCachePopulateANGLE;
ANGLE_UTIL_EXPORT extern PFNEGLPROGRAMCACHEQUERYANGLEPROC eglProgramCacheQueryANGLE;
......@@ -79,8 +81,6 @@ ANGLE_UTIL_EXPORT extern PFNEGLQUERYSURFACEPOINTERANGLEPROC eglQuerySurfacePoint
ANGLE_UTIL_EXPORT extern PFNEGLCREATESTREAMPRODUCERD3DTEXTUREANGLEPROC
eglCreateStreamProducerD3DTextureANGLE;
ANGLE_UTIL_EXPORT extern PFNEGLSTREAMPOSTD3DTEXTUREANGLEPROC eglStreamPostD3DTextureANGLE;
ANGLE_UTIL_EXPORT extern PFNEGLQUERYDISPLAYATTRIBANGLEPROC eglQueryDisplayAttribANGLE;
ANGLE_UTIL_EXPORT extern PFNEGLQUERYSTRINGIANGLEPROC eglQueryStringiANGLE;
ANGLE_UTIL_EXPORT extern PFNEGLGETSYNCVALUESCHROMIUMPROC eglGetSyncValuesCHROMIUM;
ANGLE_UTIL_EXPORT extern PFNEGLQUERYDEVICEATTRIBEXTPROC eglQueryDeviceAttribEXT;
ANGLE_UTIL_EXPORT extern PFNEGLQUERYDEVICESTRINGEXTPROC eglQueryDeviceStringEXT;
......
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