Opened 12 years ago

Closed 12 years ago

#1033 closed defect (fixed)

Profiler-related GL errors

Reported by: historic_bruno Owned by:
Priority: Should Have Milestone: Alpha 8
Component: Core engine Keywords:
Cc: Philip Taylor Patch:

Description

Here is the first error and the associated call stack from gDEBugger:

Breaked-on: glGetQueryiv(GL_CURRENT_TIME_NV , GL_QUERY_COUNTER_BITS , 0x0020E718)
Error-Code: GL_INVALID_ENUM
Error-Description: An unacceptable value is specified for an enumerated argument. The offending command is ignored, and has no other side effect than to set the error flag.
ReportGLLimits - hwdetect.cpp, line 493
RunHardwareDetection - hwdetect.cpp, line 197
InitGraphics - gamesetup.cpp, line 892
RunGameOrAtlas - main.cpp, line 494
main - main.cpp, line 516
wmain - wseh.cpp, line 380
__tmainCRTStartup - crtexe.c, line 552
CallStartupWithinTryBlock - wseh.cpp, line 396
BaseThreadInitThunk - kernel32.dll
RtlInitializeExceptionChain - ntdll.dll

That error occurs during startup and is not reported. The next occurs when enabling the profiler (F11) and is reported:

Breaked-on: glGenQueries(8 , 0x05A8B798)
Error-Code: GL_INVALID_OPERATION
Error-Description: The specified operation is not allowed in the current state. The offending function is ignored, having no side effect other than to set the error flag.
CProfiler2GPU_ARB_timer_query::RecordRegion - profiler2gpu.cpp, line 198
CProfiler2GPU::RegionLeave - profiler2gpu.cpp, line 835
CProfileViewer::RenderProfile - profileviewer.cpp, line 292
Render - gamesetup.cpp, line 273
Frame - main.cpp, line 385
RunGameOrAtlas - main.cpp, line 497
main - main.cpp, line 516
wmain - wseh.cpp, line 380
__tmainCRTStartup - crtexe.c, line 552
CallStartupWithinTryBlock - wseh.cpp, line 396
BaseThreadInitThunk - kernel32.dll
RtlInitializeExceptionChain - ntdll.dll

Attachments (1)

system_info.txt (10.2 KB ) - added by historic_bruno 12 years ago.

Download all attachments as: .zip

Change History (5)

by historic_bruno, 12 years ago

Attachment: system_info.txt added

comment:1 by Philip Taylor, 12 years ago

The first error is harmless - current AMD drivers don't support glGetQueryiv(GL_TIMESTAMP, GL_QUERY_COUNTER_BITS), which I'm pretty sure is a bug given the GL_ARB_timer_query spec. (I've seen comments in other people's code about this problem, so it's not just us). The code is properly detecting and handling that error.

The second error is bad. Maybe it's trying to generate more queries than the hardware supports, or something. Could you add some counter into CProfiler2GPU_timer_query::NewQuery to record how many new queries it generates since the start of the program, and then see what value it has when the error is triggered?

comment:2 by Philip Taylor, 12 years ago

Reportedly the second error occurs when both ARB and EXT profilers are enabled, but not if only the ARB one is.

I didn't realise yesterday that the glGenQueries doesn't actually depend on the query type, so maybe the problem is just when glGenQueries is called while any query is active. The ARB profiler doesn't do begin/end queries which is why it works by itself. Do you get the errors when the ARB is disabled and EXT is enabled?

in reply to:  2 comment:3 by historic_bruno, 12 years ago

Replying to Philip:

Do you get the errors when the ARB is disabled and EXT is enabled?

Unfortunately, yes. Also with the latest drivers (11.11) it's not just errors but an actual crash.

comment:4 by philip, 12 years ago

Resolution: fixed
Status: newclosed

(In [10622]) Avoid calling glGenQueries while a timer query is active (hopefully fixes #1033)

Note: See TracTickets for help on using tickets.