diff options
Diffstat (limited to 'indra/llrender/llgl.cpp')
| -rw-r--r-- | indra/llrender/llgl.cpp | 52 |
1 files changed, 33 insertions, 19 deletions
diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 8545f634a3..f5ffa43b30 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -81,7 +81,7 @@ static const std::string HEADLESS_VERSION_STRING("1.0"); llofstream gFailLog; -#if GL_ARB_debug_output +#if GL_ARB_debug_output || GL_KHR_debug #ifndef APIENTRY #define APIENTRY @@ -104,9 +104,9 @@ void APIENTRY gl_debug_callback(GLenum source, }*/ if (gGLManager.mIsDisabled && - severity == GL_DEBUG_SEVERITY_HIGH_ARB && - source == GL_DEBUG_SOURCE_API_ARB && - type == GL_DEBUG_TYPE_ERROR_ARB && + severity == GL_DEBUG_SEVERITY_HIGH && + source == GL_DEBUG_SOURCE_API && + type == GL_DEBUG_TYPE_ERROR && id == GL_INVALID_VALUE) { // Suppress messages about deleting already deleted objects called from LLViewerWindow::stopGL() @@ -166,7 +166,11 @@ void APIENTRY gl_debug_callback(GLenum source, if (ubo != 0) { glGetBufferParameteriv(GL_UNIFORM_BUFFER, GL_BUFFER_SIZE, &ubo_size); +#if GL_EXT_buffer_storage + glGetBufferParameteriv(GL_UNIFORM_BUFFER, GL_BUFFER_IMMUTABLE_STORAGE_EXT, &ubo_immutable); +#else glGetBufferParameteriv(GL_UNIFORM_BUFFER, GL_BUFFER_IMMUTABLE_STORAGE, &ubo_immutable); +#endif } // No needs to halt when is called from LLViewerWindow::stopGL() @@ -245,7 +249,7 @@ PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT = nullptr; PFNWGLGETSWAPINTERVALEXTPROC wglGetSwapIntervalEXT = nullptr; #endif -#if LL_LINUX && LL_X11 && !LL_MESA_HEADLESS +#if (LL_LINUX || __FreeBSD__) && LL_X11 && !LL_MESA_HEADLESS // GLX_MESA_query_renderer PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC glXQueryCurrentRendererIntegerMESA = nullptr; PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC glXQueryCurrentRendererStringMESA = nullptr; @@ -253,7 +257,7 @@ PFNGLXQUERYRENDERERINTEGERMESAPROC glXQueryRendererIntegerMESA = nullptr; PFNGLXQUERYRENDERERSTRINGMESAPROC glXQueryRendererStringMESA = nullptr; #endif -#if LL_LINUX && LL_WAYLAND &&!LL_MESA_HEADLESS +#if (LL_LINUX || __FreeBSD__) && LL_WAYLAND &&!LL_MESA_HEADLESS // EGL_VERSION_1_0 PFNEGLQUERYSTRINGPROC eglQueryString = nullptr; #endif @@ -1047,7 +1051,7 @@ void LLGLManager::initWGL() void LLGLManager::initGLX() { -#if LL_LINUX && LL_X11 && !LL_MESA_HEADLESS +#if (LL_LINUX || __FreeBSD__) && LL_X11 && !LL_MESA_HEADLESS if (!mIsX11) return; @@ -1066,7 +1070,7 @@ void LLGLManager::initGLX() void LLGLManager::initEGL() { -#if LL_LINUX && LL_WAYLAND && !LL_MESA_HEADLESS +#if (LL_LINUX || __FreeBSD__) && LL_WAYLAND && !LL_MESA_HEADLESS if (!mIsWayland) return; @@ -1179,6 +1183,7 @@ bool LLGLManager::initGL() parse_glsl_version(mGLSLVersionMajor, mGLSLVersionMinor); } +#if GL_VERSION_1_3 if (mGLVersion >= 2.1f && LLImageGL::sCompressTextures) { //use texture compression glHint(GL_TEXTURE_COMPRESSION_HINT, GL_NICEST); @@ -1187,12 +1192,13 @@ bool LLGLManager::initGL() { //GL version is < 3.0, always disable texture compression LLImageGL::sCompressTextures = false; } +#endif // Trailing space necessary to keep "nVidia Corpor_ati_on" cards // from being recognized as ATI. // NOTE: AMD has been pretty good about not breaking this check, do not rename without good reason if (mGLVendor.substr(0,4) == "ATI " -#if LL_LINUX +#if LL_LINUX || __FreeBSD__ || mGLVendor.find("AMD") != std::string::npos #endif //LL_LINUX ) @@ -1207,7 +1213,7 @@ bool LLGLManager::initGL() mIsNVIDIA = true; } else if (mGLVendor.find("INTEL") != std::string::npos -#if LL_LINUX +#if LL_LINUX || __FreeBSD__ // The Mesa-based drivers put this in the Renderer string, // not the Vendor string. || mGLRenderer.find("INTEL") != std::string::npos @@ -1264,7 +1270,7 @@ bool LLGLManager::initGL() } else #endif -#if LL_LINUX && LL_X11 && !LL_MESA_HEADLESS +#if (LL_LINUX || __FreeBSD__) && LL_X11 && !LL_MESA_HEADLESS if(mHasGLXMESAQueryRenderer && mVRAM == 0) { unsigned int vram_val = 0; @@ -1280,7 +1286,7 @@ bool LLGLManager::initGL() } #endif -#if LL_WINDOWS || LL_LINUX +#if LL_WINDOWS || LL_LINUX || __FreeBSD__ { if (mHasNVXGpuMemoryInfo && mVRAM == 0) { @@ -1312,10 +1318,12 @@ bool LLGLManager::initGL() } glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &mNumTextureImageUnits); +#if GL_VERSION_3_2 glGetIntegerv(GL_MAX_COLOR_TEXTURE_SAMPLES, &mMaxColorTextureSamples); glGetIntegerv(GL_MAX_DEPTH_TEXTURE_SAMPLES, &mMaxDepthTextureSamples); glGetIntegerv(GL_MAX_INTEGER_SAMPLES, &mMaxIntegerSamples); glGetIntegerv(GL_MAX_SAMPLE_MASK_WORDS, &mMaxSampleMaskWords); +#endif glGetIntegerv(GL_MAX_SAMPLES, &mMaxSamples); glGetIntegerv(GL_MAX_VARYING_VECTORS, &mMaxVaryingVectors); glGetIntegerv(GL_MAX_UNIFORM_BLOCK_SIZE, &mMaxUniformBlockSize); @@ -1329,7 +1337,7 @@ bool LLGLManager::initGL() if (mHasAnisotropic) { - glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY, &mMaxAnisotropy); + glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &mMaxAnisotropy); } initGLStates(); @@ -1523,7 +1531,7 @@ void LLGLManager::reloadExtensionsString() } #endif -#if LL_SDL_WINDOW && LL_LINUX && LL_X11 && !LL_MESA_HEADLESS +#if LL_SDL_WINDOW && (LL_LINUX || __FreeBSD__) && LL_X11 && !LL_MESA_HEADLESS if (mIsX11) { if (LLWindowSDL::sX11Data.xdisplay && LLWindowSDL::sX11Data.xwindow) @@ -1544,7 +1552,7 @@ void LLGLManager::reloadExtensionsString() } #endif -#if LL_SDL_WINDOW && LL_LINUX && LL_WAYLAND && !LL_MESA_HEADLESS +#if LL_SDL_WINDOW && (LL_LINUX || __FreeBSD__) && LL_WAYLAND && !LL_MESA_HEADLESS if (mIsWayland) { SDL_EGLDisplay egl_display = SDL_EGL_GetCurrentDisplay(); @@ -2303,6 +2311,7 @@ void rotate_quat(LLQuaternion& rotation) void flush_glerror() { + if(!gDebugGL) return; glGetError(); } @@ -2340,8 +2349,10 @@ const std::string getGLErrorString(GLenum error) } //this function outputs gl error to the log file, does not crash the code. -void log_glerror() +void log_glerror(std::string comment) { + if(!gDebugGL) return; + if (LL_UNLIKELY(!gGLManager.mInited)) { return ; @@ -2349,7 +2360,7 @@ void log_glerror() // Create or update texture to be used with this data GLenum error; error = glGetError(); - while (LL_UNLIKELY(error)) + if (error != GL_NO_ERROR) { std::string gl_error_msg = getGLErrorString(error); LL_WARNS() << "GL Error: 0x" << std::hex << error << std::dec << " GL Error String: " << gl_error_msg << LL_ENDL; @@ -2414,6 +2425,7 @@ void assert_glerror() void clear_glerror() { + if(!gDebugGL) return; glGetError(); glGetError(); } @@ -2437,8 +2449,10 @@ void LLGLState::initClass() // sStateMap[GL_TEXTURE_2D] = GL_TRUE; //make sure multisample defaults to disabled +#if GL_EXT_multisample || GL_EXT_multisampled_compatibility sStateMap[GL_MULTISAMPLE] = GL_FALSE; glDisable(GL_MULTISAMPLE); +#endif } //static @@ -2453,6 +2467,7 @@ void LLGLState::restoreGL() void LLGLState::resetTextureStates() { gGL.flush(); +#if GL_VERSION_1_3 GLint maxTextureUnits; glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &maxTextureUnits); @@ -2461,6 +2476,7 @@ void LLGLState::resetTextureStates() gGL.getTexUnit(j)->activate(); j == 0 ? gGL.getTexUnit(j)->enable(LLTexUnit::TT_TEXTURE) : gGL.getTexUnit(j)->disable(); } +#endif } void LLGLState::dumpStates() @@ -2989,5 +3005,3 @@ extern "C" __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1; } #endif - - |
