glx/extensions: split set_glx_extension into find_ and set_

An upcoming commit will require to find an extension in a list. Rather
than duplicating part of the code from set_glx_extension, split it into
find_extension and set_glx_extension.

NOTE: set_glx_extension is a bit of a misnomer since it is also used
for gl extensions. This is why the find function is named
find_extension rather than find_glx_extension.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Martin Peres <martin.peres@mupuf.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7212>
This commit is contained in:
Martin Peres
2020-10-15 08:47:50 +03:00
parent 4ba255dfaa
commit af25f47bdc

View File

@@ -351,6 +351,29 @@ static void __glXProcessServerString(const struct extension_info *ext,
const char *server_string,
unsigned char *server_support);
/**
* Find an extension in the list based on its name.
*
* \param ext List of extensions where to search.
* \param name Name of the extension.
* \param name_len Length, in characters, of the extension name.
*/
static const struct extension_info *
find_extension(const struct extension_info *ext, const char *name,
unsigned name_len)
{
unsigned i;
for (i = 0; ext[i].name != NULL; i++) {
if ((name_len == ext[i].name_len)
&& (strncmp(ext[i].name, name, name_len) == 0)) {
return &ext[i];
}
}
return NULL;
}
/**
* Set the state of a GLX extension.
*
@@ -360,25 +383,18 @@ static void __glXProcessServerString(const struct extension_info *ext,
* \param supported Table in which the state of the extension is to be set.
*/
static void
set_glx_extension(const struct extension_info *ext,
set_glx_extension(const struct extension_info *ext_list,
const char *name, unsigned name_len, GLboolean state,
unsigned char *supported)
{
unsigned i;
const struct extension_info *ext = find_extension(ext_list, name, name_len);
if (!ext)
return;
for (i = 0; ext[i].name != NULL; i++) {
if ((name_len == ext[i].name_len)
&& (strncmp(ext[i].name, name, name_len) == 0)) {
if (state) {
SET_BIT(supported, ext[i].bit);
}
else {
CLR_BIT(supported, ext[i].bit);
}
return;
}
if (state) {
SET_BIT(supported, ext->bit);
} else {
CLR_BIT(supported, ext->bit);
}
}