[Bug 78769] New: i965: glGetGraphicsResetStatusARB always returns *RESET* status and never NO_ERROR
bugzilla-daemon at freedesktop.org
bugzilla-daemon at freedesktop.org
Thu May 15 22:15:53 PDT 2014
https://bugs.freedesktop.org/show_bug.cgi?id=78769
Priority: medium
Bug ID: 78769
Assignee: idr at freedesktop.org
Summary: i965: glGetGraphicsResetStatusARB always returns
*RESET* status and never NO_ERROR
QA Contact: intel-3d-bugs at lists.freedesktop.org
Severity: normal
Classification: Unclassified
OS: Linux (All)
Reporter: pavel.e.popov at intel.com
Hardware: x86-64 (AMD64)
Status: NEW
Version: 10.1
Component: Drivers/DRI/i965
Product: Mesa
Created attachment 99138
--> https://bugs.freedesktop.org/attachment.cgi?id=99138&action=edit
Initial patch to resolve this issue
Overview:
=========
The glGetGraphicsResetStatusARB from ARB_robustness extension always returns
GUILTY_CONTEXT_RESET_ARB and never returns NO_ERROR for guilty context with
LOSE_CONTEXT_ON_RESET_ARB strategy.
This is because Mesa returns GUILTY_CONTEXT_RESET_ARB if batch_active !=0
whereas kernel driver never reset batch_active and this variable always > 0 for
guilty context.
The same behaviour also can be observed for batch_pending and
INNOCENT_CONTEXT_RESET_ARB.
But spec says the following
(http://www.opengl.org/registry/specs/ARB/robustness.txt):
If a reset status other than NO_ERROR is returned and subsequent
calls return NO_ERROR, the context reset was encountered and
completed. If a reset status is repeatedly returned, the context may
be in the process of resetting.
8. How should the application react to a reset context event?
RESOLVED: For this extension, the application is expected to query
the reset status until NO_ERROR is returned. If a reset is encountered,
at least one *RESET* status will be returned. Once NO_ERROR is
encountered, the application can safely destroy the old context and
create a new one.
Reproducer:
===========
1. Create context with GL_LOSE_CONTEXT_ON_RESET_ARB strategy using
glXCreateContextAttribsARB().
2. Provoke hardware reset. For example using infinite shader.
3. Call glGetGraphicsResetStatusARB() in a loop.
4. Make sure that this function always returns GUILTY_CONTEXT_RESET_ARB. It's a
wrong behavior.
Solution:
=========
The main problem is the context may be in the process of resetting and in this
case a reset status should be repeatedly returned. But looks like the kernel
driver returns nonzero active/pending only if the context reset has already
been encountered and completed.
For this reason the *RESET* status cannot be repeatedly returned and should be
returned only once.
The reset_count and brw->reset_count variables can be used to control that
glGetGraphicsResetStatusARB returns *RESET* status only once for each context.
Note the i915 triggers reset_count twice which allows to return correct reset
count immediately after active/pending have been incremented.
The patch is attached.
--
You are receiving this mail because:
You are the QA Contact for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/intel-3d-bugs/attachments/20140516/51243f09/attachment-0001.html>
More information about the intel-3d-bugs
mailing list