SL-17035 Crash at gl_debug_callback

RenderDebugGL was avaliable from develop menu, but since it was persistent, caused slowdowns and crashes it could result in users crashing or lagging without knowing the cause. To resolve the issue it was made to last for a single session.
master
Andrey Kleshchev 2022-04-14 22:24:11 +03:00
parent e2aa8e17e2
commit e5cd4da823
9 changed files with 20 additions and 23 deletions

View File

@ -60,10 +60,10 @@
BOOL gDebugSession = FALSE;
BOOL gDebugGLSession = FALSE;
BOOL gClothRipple = FALSE;
BOOL gHeadlessClient = FALSE;
BOOL gGLActive = FALSE;
BOOL gGLDebugLoggingEnabled = TRUE;
static const std::string HEADLESS_VENDOR_STRING("Linden Lab");
static const std::string HEADLESS_RENDERER_STRING("Headless");
@ -85,8 +85,6 @@ void APIENTRY gl_debug_callback(GLenum source,
const GLchar* message,
GLvoid* userParam)
{
if (gGLDebugLoggingEnabled)
{
if (severity == GL_DEBUG_SEVERITY_HIGH_ARB)
{
LL_WARNS() << "----- GL ERROR --------" << LL_ENDL;
@ -100,11 +98,12 @@ void APIENTRY gl_debug_callback(GLenum source,
LL_WARNS() << "Severity: " << std::hex << severity << LL_ENDL;
LL_WARNS() << "Message: " << message << LL_ENDL;
LL_WARNS() << "-----------------------" << LL_ENDL;
#ifndef LL_RELEASE_FOR_DOWNLOAD
if (severity == GL_DEBUG_SEVERITY_HIGH_ARB)
{
LL_ERRS() << "Halting on GL Error" << LL_ENDL;
}
}
#endif //LL_RELEASE_FOR_DOWNLOAD
}
#endif

View File

@ -47,6 +47,7 @@
extern BOOL gDebugGL;
extern BOOL gDebugSession;
extern BOOL gDebugGLSession;
extern llofstream gFailLog;
#define LL_GL_ERRS LL_ERRS("RenderState")

View File

@ -55,7 +55,7 @@
<key>debugsession</key>
<map>
<key>desc</key>
<string>Run as if RenderDebugGL is TRUE, but log errors until end of session.</string>
<string>Run as if RenderDebugGLSession is TRUE, but log errors until end of session.</string>
<key>map-to</key>
<string>DebugSession</string>
</map>

View File

@ -9163,10 +9163,10 @@
<key>Value</key>
<real>0.5</real>
</map>
<key>RenderDebugGL</key>
<key>RenderDebugGLSession</key>
<map>
<key>Comment</key>
<string>Enable strict GL debugging.</string>
<string>Enable strict GL debugging on the start of next session.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>

View File

@ -604,7 +604,7 @@ static void settings_modify()
LLRenderTarget::sUseFBO = LLPipeline::sRenderDeferred && gSavedSettings.getBOOL("RenderAvatarVP");
LLVOSurfacePatch::sLODFactor = gSavedSettings.getF32("RenderTerrainLODFactor");
LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //square lod factor to get exponential range of [1,4]
gDebugGL = gSavedSettings.getBOOL("RenderDebugGL") || gDebugSession;
gDebugGL = gDebugGLSession || gDebugSession;
gDebugPipeline = gSavedSettings.getBOOL("RenderDebugPipeline");
}
@ -2708,6 +2708,15 @@ bool LLAppViewer::initConfiguration()
ll_init_fail_log(gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "test_failures.log"));
}
if (gSavedSettings.getBOOL("RenderDebugGLSession"))
{
gDebugGLSession = TRUE;
gDebugGL = TRUE;
// gDebugGL can cause excessive logging
// so it's limited to a single session
gSavedSettings.setBOOL("RenderDebugGLSession", FALSE);
}
const LLControlVariable* skinfolder = gSavedSettings.getControl("SkinCurrent");
if(skinfolder && LLStringUtil::null != skinfolder->getValue().asString())
{

View File

@ -63,7 +63,6 @@
#pragma GCC diagnostic ignored "-Wuninitialized"
#endif
extern BOOL gGLDebugLoggingEnabled;
#define LL_MAX_INDICES_COUNT 1000000
static LLStaticHashedString sTextureIndexIn("texture_index_in");
@ -1522,7 +1521,6 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
!rebuild_weights && //TODO: add support for weights
!volume.isUnique()) //source volume is NOT flexi
{ //use transform feedback to pack vertex buffer
//gGLDebugLoggingEnabled = TRUE;
LL_RECORD_BLOCK_TIME(FTM_FACE_GEOM_FEEDBACK);
LLGLEnable discard(GL_RASTERIZER_DISCARD);
LLVertexBuffer* buff = (LLVertexBuffer*) vf.mVertexBuffer.get();

View File

@ -484,13 +484,6 @@ static bool handleRenderBumpChanged(const LLSD& newval)
return true;
}
static bool handleRenderDebugGLChanged(const LLSD& newvalue)
{
gDebugGL = newvalue.asBoolean() || gDebugSession;
gGL.clearErrors();
return true;
}
static bool handleRenderDebugPipelineChanged(const LLSD& newvalue)
{
gDebugPipeline = newvalue.asBoolean();
@ -697,7 +690,6 @@ void settings_setup_listeners()
gSavedSettings.getControl("RenderObjectBump")->getSignal()->connect(boost::bind(&handleRenderBumpChanged, _2));
gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
gSavedSettings.getControl("RenderDeferredNoise")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
gSavedSettings.getControl("RenderDebugGL")->getSignal()->connect(boost::bind(&handleRenderDebugGLChanged, _2));
gSavedSettings.getControl("RenderDebugPipeline")->getSignal()->connect(boost::bind(&handleRenderDebugPipelineChanged, _2));
gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _2));
gSavedSettings.getControl("RenderDeferred")->getSignal()->connect(boost::bind(&handleRenderDeferredChanged, _2));

View File

@ -107,8 +107,6 @@ static LLTrace::BlockTimerStatHandle FTM_GEN_TRIANGLES("Generate Triangles");
static LLTrace::BlockTimerStatHandle FTM_GEN_VOLUME("Generate Volumes");
static LLTrace::BlockTimerStatHandle FTM_VOLUME_TEXTURES("Volume Textures");
extern BOOL gGLDebugLoggingEnabled;
// Implementation class of LLMediaDataClientObject. See llmediadataclient.h
class LLMediaDataClientObjectImpl : public LLMediaDataClientObject
{

View File

@ -3121,14 +3121,14 @@ function="World.EnvPreset"
<menu_item_separator />
<menu_item_check
label="Debug GL"
label="Start Debug GL on next run"
name="Debug GL">
<menu_item_check.on_check
function="CheckControl"
parameter="RenderDebugGL" />
parameter="RenderDebugGLSession" />
<menu_item_check.on_click
function="ToggleControl"
parameter="RenderDebugGL" />
parameter="RenderDebugGLSession" />
</menu_item_check>
<menu_item_check
label="Debug Pipeline"