summaryrefslogtreecommitdiff
path: root/indra/llrender/llgl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llrender/llgl.cpp')
-rw-r--r--indra/llrender/llgl.cpp52
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
-
-