[Refactor] (BackendLoader): share extension name matching between GLES and EGL probes

This commit is contained in:
2026-10-04 20:54:28 -04:00
parent 880be57bb6
commit 88bc35b711
4 changed files with 15 additions and 20 deletions
+1 -10
View File
@@ -18613,16 +18613,7 @@ namespace MobileGL::MG_Backend::DirectGLES {
Bool YuvTarget = false;
};
Bool HasExtensionWord(const char* list, const char* word) {
if (list == nullptr) return false;
const SizeT n = std::strlen(word);
for (const char* at = std::strstr(list, word); at != nullptr; at = std::strstr(at + 1, word)) {
const Bool startOk = at == list || at[-1] == ' ';
const Bool endOk = at[n] == '\0' || at[n] == ' ';
if (startOk && endOk) return true;
}
return false;
}
using MG_Util::BackendLoader::HasExtensionWord;
// None of these is in the loader's tables, and eglGetProcAddress hands back live-looking
// stubs for entry points a driver lacks, so the extension strings decide first. Resolved
+1 -10
View File
@@ -2898,16 +2898,7 @@ namespace MobileGL::MG_Backend::DirectGLES {
kT0MapReadBit | kT0MapWriteBit | kMapPersistentBit | kMapCoherentBit | kDynamicStorageBit;
constexpr GLbitfield kT0MapFlags = kT0MapReadBit | kT0MapWriteBit | kMapPersistentBit | kMapCoherentBit;
Bool HasExtensionWord(const char* list, const char* word) {
if (list == nullptr) return false;
const SizeT n = std::strlen(word);
for (const char* at = std::strstr(list, word); at != nullptr; at = std::strstr(at + 1, word)) {
const Bool startOk = at == list || at[-1] == ' ';
const Bool endOk = at[n] == '\0' || at[n] == ' ';
if (startOk && endOk) return true;
}
return false;
}
using MG_Util::BackendLoader::HasExtensionWord;
Bool ResolveT0EntryPoints(String& why) {
if (g_t0GetNativeClientBuffer != nullptr && g_t0BufferStorageExternal != nullptr) return true;
@@ -21,6 +21,17 @@
#endif
namespace MobileGL::MG_Util::BackendLoader {
Bool HasExtensionWord(const char* list, const char* word) {
if (list == nullptr || word == nullptr || *word == '\0') return false;
const SizeT n = std::strlen(word);
for (const char* at = std::strstr(list, word); at != nullptr; at = std::strstr(at + 1, word)) {
const Bool startOk = at == list || at[-1] == ' ';
const Bool endOk = at[n] == '\0' || at[n] == ' ';
if (startOk && endOk) return true;
}
return false;
}
static Bool UseAngle() {
return MG_Config::Features.EsprytUseAngle;
}
@@ -1364,6 +1364,8 @@ namespace MobileGL {
} // namespace MG_External
namespace MG_Util::BackendLoader {
// Match a complete name in a space-separated GLES/EGL extension string.
Bool HasExtensionWord(const char* list, const char* word);
void AcquireGLESFunctions(MG_External::GLESFunctionsTable& funcs,
MG_External::EGL::eglGetProcAddress_PTR procAddress);
void AcquireEGLFunctions(MG_External::EGLFunctionsTable& funcs);