Ticket #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 |
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
Change History
comment:1 Changed 18 months ago by Philip
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 follow-up: ↓ 3 Changed 18 months ago by Philip
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?
