mesa/src
Pavel Popov 8dc4a98c44 i965: Properly return *RESET* status in glGetGraphicsResetStatusARB
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 ARB_robustness spec says:

  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.

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.

v2 (idr): Trivial reformatting of comments.

Signed-off-by: Pavel Popov <pavel.e.popov@intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Cc: "10.1 10.2" <mesa-stable@lists.freedesktop.org>
2014-05-23 09:25:04 -07:00
..
egl Fix build for darwin 2014-05-23 15:24:01 +01:00
gallium Make DRI dependencies and build depend on the target 2014-05-23 15:24:04 +01:00
gbm Make DRI dependencies and build depend on the target 2014-05-23 15:24:04 +01:00
getopt
glsl glsl: Add C-callable fprint_ir function. 2014-05-15 15:45:39 -07:00
glx appleglx: Improve error reporting if CGLChoosePixelFormat() didn't find any matching pixel formats. 2014-05-23 15:24:09 +01:00
gtest gtest: Update to 1.7.0. 2014-04-14 00:06:53 -07:00
hgl haiku libGL: Move from gallium target to src/hgl 2014-01-06 15:50:21 -06:00
loader loader: don't limit the non-udev path to only android 2014-04-05 12:17:28 +01:00
mapi Fix build of appleglx 2014-05-23 15:24:07 +01:00
mesa i965: Properly return *RESET* status in glGetGraphicsResetStatusARB 2014-05-23 09:25:04 -07:00
Makefile.am src/build: Add getopt to distribution. 2014-04-07 09:41:02 -07:00
SConscript loader: introduce the loader util lib 2014-01-18 18:47:27 +00:00