mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 05:08:08 +02:00
mesa: Implement proper tracking logic for glGetGraphicsResetStatusARB
Drivers still have to implement dd_function_table::GetGraphicsResetStatus. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
a6eb04c3d8
commit
916bc4491a
1 changed files with 43 additions and 4 deletions
|
|
@ -23,7 +23,7 @@
|
|||
*/
|
||||
|
||||
|
||||
|
||||
#include <stdbool.h>
|
||||
#include "glheader.h"
|
||||
#include "context.h"
|
||||
#include "get.h"
|
||||
|
|
@ -307,9 +307,48 @@ _mesa_GetGraphicsResetStatusARB( void )
|
|||
GET_CURRENT_CONTEXT(ctx);
|
||||
GLenum status = GL_NO_ERROR;
|
||||
|
||||
if (MESA_VERBOSE & VERBOSE_API)
|
||||
_mesa_debug(ctx, "glGetGraphicsResetStatusARB"
|
||||
"(always returns GL_NO_ERROR)\n");
|
||||
/* The ARB_robustness specification says:
|
||||
*
|
||||
* "If the reset notification behavior is NO_RESET_NOTIFICATION_ARB,
|
||||
* then the implementation will never deliver notification of reset
|
||||
* events, and GetGraphicsResetStatusARB will always return NO_ERROR."
|
||||
*/
|
||||
if (ctx->Const.ResetStrategy == GL_NO_RESET_NOTIFICATION_ARB) {
|
||||
if (MESA_VERBOSE & VERBOSE_API)
|
||||
_mesa_debug(ctx,
|
||||
"glGetGraphicsResetStatusARB always returns GL_NO_ERROR "
|
||||
"because reset notifictation was not requested at context "
|
||||
"creation.\n");
|
||||
|
||||
return GL_NO_ERROR;
|
||||
}
|
||||
|
||||
if (ctx->Driver.GetGraphicsResetStatus) {
|
||||
/* Query the reset status of this context from the driver core.
|
||||
*/
|
||||
status = ctx->Driver.GetGraphicsResetStatus(ctx);
|
||||
|
||||
_glthread_LOCK_MUTEX(ctx->Shared->Mutex);
|
||||
|
||||
/* If this context has not been affected by a GPU reset, check to see if
|
||||
* some other context in the share group has been affected by a reset.
|
||||
* If another context saw a reset but this context did not, assume that
|
||||
* this context was not guilty.
|
||||
*/
|
||||
if (status != GL_NO_ERROR) {
|
||||
ctx->Shared->ShareGroupReset = true;
|
||||
} else if (ctx->Shared->ShareGroupReset && !ctx->ShareGroupReset) {
|
||||
status = GL_INNOCENT_CONTEXT_RESET_ARB;
|
||||
}
|
||||
|
||||
ctx->ShareGroupReset = ctx->Shared->ShareGroupReset;
|
||||
_glthread_UNLOCK_MUTEX(ctx->Shared->Mutex);
|
||||
}
|
||||
|
||||
if (!ctx->Driver.GetGraphicsResetStatus && (MESA_VERBOSE & VERBOSE_API))
|
||||
_mesa_debug(ctx,
|
||||
"glGetGraphicsResetStatusARB always returns GL_NO_ERROR "
|
||||
"because the driver doesn't track reset status.\n");
|
||||
|
||||
return status;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue