From ac42ac336ef014d6a84328570f665abc1d338315 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Thu, 10 Feb 2022 17:54:27 -0800 Subject: [PATCH] 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. --- al/extension.cpp | 118 ----------------------------------------------- alc/alc.cpp | 32 +++++++++++-- 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(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(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(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(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(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; }