aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2022-02-10 17:54:27 -0800
committerChris Robinson <[email protected]>2022-02-10 17:54:27 -0800
commitac42ac336ef014d6a84328570f665abc1d338315 (patch)
treeadc633affe7d394361223c3fa1f68bded969da80
parent804bf06369b82fe649c81a6a52400dc185242867 (diff)
Don't hide EAX functions behind a context
The standard says a function being returned doesn't necessarily mean it's usable, and calling them will return failure if called when not usable. The config option still prevents it from being returned, to better hide it when disabled globally.
-rw-r--r--al/extension.cpp118
-rw-r--r--alc/alc.cpp32
2 files changed, 28 insertions, 122 deletions
diff --git a/al/extension.cpp b/al/extension.cpp
index c442fa05..5dda2a86 100644
--- a/al/extension.cpp
+++ b/al/extension.cpp
@@ -32,10 +32,6 @@
#include "core/except.h"
#include "opthelpers.h"
-#ifdef ALSOFT_EAX
-#include "eax_globals.h"
-#include "eax_x_ram.h"
-#endif // ALSOFT_EAX
AL_API ALboolean AL_APIENTRY alIsExtensionPresent(const ALchar *extName)
START_API_FUNC
@@ -47,23 +43,6 @@ START_API_FUNC
SETERR_RETURN(context, AL_INVALID_VALUE, AL_FALSE, "NULL pointer");
size_t len{strlen(extName)};
-#ifdef ALSOFT_EAX
- if (al::strcasecmp(eax_v2_0_ext_name_1, extName) == 0 ||
- al::strcasecmp(eax_v2_0_ext_name_2, extName) == 0 ||
- al::strcasecmp(eax_v3_0_ext_name, extName) == 0 ||
- al::strcasecmp(eax_v4_0_ext_name, extName) == 0 ||
- al::strcasecmp(eax_v5_0_ext_name, extName) == 0)
- {
- const auto is_present = eax_g_is_enabled && context->eax_is_capable();
- return is_present ? AL_TRUE : AL_FALSE;
- }
-
- if (al::strcasecmp(eax_x_ram_ext_name, extName) == 0)
- {
- const auto is_present = eax_g_is_enabled;
- return is_present ? AL_TRUE : AL_FALSE;
- }
-#endif // ALSOFT_EAX
const char *ptr{context->mExtensionList};
while(ptr && *ptr)
{
@@ -87,75 +66,6 @@ AL_API ALvoid* AL_APIENTRY alGetProcAddress(const ALchar *funcName)
START_API_FUNC
{
if(!funcName) return nullptr;
-#ifdef ALSOFT_EAX
- if (al::strcasecmp(funcName, eax_eax_set_func_name) == 0)
- {
- if (!eax_g_is_enabled)
- {
- return nullptr;
- }
-
- ContextRef context{GetContextRef()};
-
- if (!context || !context->eax_is_capable())
- {
- return nullptr;
- }
-
- return reinterpret_cast<ALvoid*>(EAXSet);
- }
-
- if (al::strcasecmp(funcName, eax_eax_get_func_name) == 0)
- {
- if (!eax_g_is_enabled)
- {
- return nullptr;
- }
-
- ContextRef context{GetContextRef()};
-
- if (!context || !context->eax_is_capable())
- {
- return nullptr;
- }
-
- return reinterpret_cast<ALvoid*>(EAXGet);
- }
-
- if (al::strcasecmp(funcName, eax_eax_set_buffer_mode_func_name) == 0)
- {
- if (!eax_g_is_enabled)
- {
- return nullptr;
- }
-
- ContextRef context{GetContextRef()};
-
- if (!context)
- {
- return nullptr;
- }
-
- return reinterpret_cast<ALvoid*>(EAXSetBufferMode);
- }
-
- if (al::strcasecmp(funcName, eax_eax_get_buffer_mode_func_name) == 0)
- {
- if (!eax_g_is_enabled)
- {
- return nullptr;
- }
-
- ContextRef context{GetContextRef()};
-
- if (!context)
- {
- return nullptr;
- }
-
- return reinterpret_cast<ALvoid*>(EAXGetBufferMode);
- }
-#endif // ALSOFT_EAX
return alcGetProcAddress(nullptr, funcName);
}
END_API_FUNC
@@ -164,34 +74,6 @@ AL_API ALenum AL_APIENTRY alGetEnumValue(const ALchar *enumName)
START_API_FUNC
{
if(!enumName) return static_cast<ALenum>(0);
-#ifdef ALSOFT_EAX
- if (eax_g_is_enabled)
- {
- struct Descriptor
- {
- const char* name;
- ALenum value;
- }; // Descriptor
-
- constexpr Descriptor descriptors[] =
- {
- Descriptor{AL_EAX_RAM_SIZE_NAME, AL_EAX_RAM_SIZE},
- Descriptor{AL_EAX_RAM_FREE_NAME, AL_EAX_RAM_FREE},
-
- Descriptor{AL_STORAGE_AUTOMATIC_NAME, AL_STORAGE_AUTOMATIC},
- Descriptor{AL_STORAGE_HARDWARE_NAME, AL_STORAGE_HARDWARE},
- Descriptor{AL_STORAGE_ACCESSIBLE_NAME, AL_STORAGE_ACCESSIBLE},
- }; // descriptors
-
- for (const auto& descriptor : descriptors)
- {
- if (strcmp(descriptor.name, enumName) == 0)
- {
- return descriptor.value;
- }
- }
- }
-#endif // ALSOFT_EAX
return alcGetEnumValue(nullptr, enumName);
}
END_API_FUNC
diff --git a/alc/alc.cpp b/alc/alc.cpp
index d6bd005f..6358ad8b 100644
--- a/alc/alc.cpp
+++ b/alc/alc.cpp
@@ -452,6 +452,13 @@ const struct {
DECL(alAuxiliaryEffectSlotPlayvSOFT),
DECL(alAuxiliaryEffectSlotStopSOFT),
DECL(alAuxiliaryEffectSlotStopvSOFT),
+#ifdef ALSOFT_EAX
+}, eaxFunctions[] = {
+ DECL(EAXGet),
+ DECL(EAXSet),
+ DECL(EAXGetBufferMode),
+ DECL(EAXSetBufferMode),
+#endif
};
#undef DECL
@@ -882,6 +889,7 @@ constexpr struct {
DECL(AL_STOP_SOURCES_ON_DISCONNECT_SOFT),
#ifdef ALSOFT_EAX
+}, eaxEnumerations[] = {
DECL(AL_EAX_RAM_SIZE),
DECL(AL_EAX_RAM_FREE),
DECL(AL_STORAGE_AUTOMATIC),
@@ -2943,15 +2951,23 @@ START_API_FUNC
{
DeviceRef dev{VerifyDevice(device)};
alcSetError(dev.get(), ALC_INVALID_VALUE);
+ return nullptr;
}
- else
+#ifdef ALSOFT_EAX
+ if(eax_g_is_enabled)
{
- for(const auto &func : alcFunctions)
+ for(const auto &func : eaxFunctions)
{
if(strcmp(func.funcName, funcName) == 0)
return func.address;
}
}
+#endif
+ for(const auto &func : alcFunctions)
+ {
+ if(strcmp(func.funcName, funcName) == 0)
+ return func.address;
+ }
return nullptr;
}
END_API_FUNC
@@ -2964,15 +2980,23 @@ START_API_FUNC
{
DeviceRef dev{VerifyDevice(device)};
alcSetError(dev.get(), ALC_INVALID_VALUE);
+ return 0;
}
- else
+#ifdef ALSOFT_EAX
+ if(eax_g_is_enabled)
{
- for(const auto &enm : alcEnumerations)
+ for(const auto &enm : eaxEnumerations)
{
if(strcmp(enm.enumName, enumName) == 0)
return enm.value;
}
}
+#endif
+ for(const auto &enm : alcEnumerations)
+ {
+ if(strcmp(enm.enumName, enumName) == 0)
+ return enm.value;
+ }
return 0;
}