mesa/dri: Add basic plumbing for GLX_ARB_robustness reset notification strategy

No drivers advertise the DRI2 extension yet, so no driver should ever
see a value other than false for notify_reset.

The changes in nouveau use tabs because nouveau seems to have it's own
indentation rules.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Ian Romanick 2012-09-10 17:11:33 +03:00
parent 916bc4491a
commit 17c94de33b
12 changed files with 49 additions and 2 deletions

View file

@ -63,6 +63,7 @@ dri_create_context(gl_api api, const struct gl_config * visual,
unsigned major_version,
unsigned minor_version,
uint32_t flags,
bool notify_reset,
unsigned *error,
void *sharedContextPrivate)
{
@ -100,6 +101,11 @@ dri_create_context(gl_api api, const struct gl_config * visual,
goto fail;
}
if (notify_reset) {
*error = __DRI_CTX_ERROR_UNKNOWN_ATTRIBUTE;
goto fail;
}
if (sharedContextPrivate) {
st_share = ((struct dri_context *)sharedContextPrivate)->st;
}

View file

@ -306,6 +306,7 @@ dri2CreateContextAttribs(__DRIscreen *screen, int api,
unsigned major_version = 1;
unsigned minor_version = 0;
uint32_t flags = 0;
bool notify_reset = false;
assert((num_attribs == 0) || (attribs != NULL));
@ -344,6 +345,10 @@ dri2CreateContextAttribs(__DRIscreen *screen, int api,
case __DRI_CTX_ATTRIB_FLAGS:
flags = attribs[i * 2 + 1];
break;
case __DRI_CTX_ATTRIB_RESET_STRATEGY:
notify_reset = (attribs[i * 2 + 1]
!= __DRI_CTX_RESET_NO_NOTIFICATION);
break;
default:
/* We can't create a context that satisfies the requirements of an
* attribute that we don't understand. Return failure.
@ -424,7 +429,7 @@ dri2CreateContextAttribs(__DRIscreen *screen, int api,
if (!screen->driver->CreateContext(mesa_api, modes, context,
major_version, minor_version,
flags, error, shareCtx) ) {
flags, notify_reset, error, shareCtx)) {
free(context);
return NULL;
}

View file

@ -57,6 +57,7 @@
#include <GL/internal/dri_interface.h>
#include "main/mtypes.h"
#include "xmlconfig.h"
#include <stdbool.h>
/**
* Extensions.
@ -87,6 +88,7 @@ struct __DriverAPIRec {
unsigned major_version,
unsigned minor_version,
uint32_t flags,
bool notify_reset,
unsigned *error,
void *sharedContextPrivate);

View file

@ -908,6 +908,7 @@ intelCreateContext(gl_api api,
unsigned major_version,
unsigned minor_version,
uint32_t flags,
bool notify_reset,
unsigned *error,
void *sharedContextPrivate)
{
@ -916,6 +917,11 @@ intelCreateContext(gl_api api,
__DRIscreen *sPriv = driContextPriv->driScreenPriv;
struct intel_screen *intelScreen = sPriv->driverPrivate;
if (notify_reset) {
*error = __DRI_CTX_ERROR_UNKNOWN_ATTRIBUTE;
return false;
}
if (IS_9XX(intelScreen->deviceID)) {
success = i915CreateContext(api, mesaVis, driContextPriv,
major_version, minor_version, error,

View file

@ -569,6 +569,7 @@ brwCreateContext(gl_api api,
unsigned major_version,
unsigned minor_version,
uint32_t flags,
bool notify_reset,
unsigned *dri_ctx_error,
void *sharedContextPrivate)
{
@ -579,6 +580,11 @@ brwCreateContext(gl_api api,
struct dd_function_table functions;
struct gl_config visual;
if (notify_reset) {
*dri_ctx_error = __DRI_CTX_ERROR_UNKNOWN_ATTRIBUTE;
return false;
}
struct brw_context *brw = rzalloc(NULL, struct brw_context);
if (!brw) {
printf("%s: failed to alloc context\n", __FUNCTION__);

View file

@ -1473,6 +1473,7 @@ GLboolean brwCreateContext(gl_api api,
unsigned major_version,
unsigned minor_version,
uint32_t flags,
bool notify_reset,
unsigned *error,
void *sharedContextPrivate);

View file

@ -53,6 +53,7 @@ nouveau_context_create(gl_api api,
unsigned major_version,
unsigned minor_version,
uint32_t flags,
bool notify_reset,
unsigned *error,
void *share_ctx)
{
@ -65,6 +66,11 @@ nouveau_context_create(gl_api api,
*/
(void) flags;
if (notify_reset) {
*error = __DRI_CTX_ERROR_UNKNOWN_ATTRIBUTE;
return false;
}
ctx = screen->driver->context_create(screen, visual, share_ctx);
if (!ctx) {
*error = __DRI_CTX_ERROR_NO_MEMORY;

View file

@ -111,7 +111,8 @@ GLboolean
nouveau_context_create(gl_api api,
const struct gl_config *visual, __DRIcontext *dri_ctx,
unsigned major_version, unsigned minor_version,
uint32_t flags, unsigned *error, void *share_ctx);
uint32_t flags, bool notify_reset, unsigned *error,
void *share_ctx);
GLboolean
nouveau_context_init(struct gl_context *ctx, struct nouveau_screen *screen,

View file

@ -201,6 +201,7 @@ GLboolean r200CreateContext( gl_api api,
unsigned major_version,
unsigned minor_version,
uint32_t flags,
bool notify_reset,
unsigned *error,
void *sharedContextPrivate)
{
@ -216,6 +217,11 @@ GLboolean r200CreateContext( gl_api api,
*/
(void) flags;
if (notify_reset) {
*error = __DRI_CTX_ERROR_UNKNOWN_ATTRIBUTE;
return false;
}
assert(glVisual);
assert(driContextPriv);
assert(screen);

View file

@ -638,6 +638,7 @@ extern GLboolean r200CreateContext( gl_api api,
unsigned major_version,
unsigned minor_version,
uint32_t flags,
bool notify_reset,
unsigned *error,
void *sharedContextPrivate);
extern GLboolean r200MakeCurrent( __DRIcontext *driContextPriv,

View file

@ -168,6 +168,7 @@ r100CreateContext( gl_api api,
unsigned major_version,
unsigned minor_version,
uint32_t flags,
bool notify_reset,
unsigned *error,
void *sharedContextPrivate)
{
@ -183,6 +184,11 @@ r100CreateContext( gl_api api,
*/
(void) flags;
if (notify_reset) {
*error = __DRI_CTX_ERROR_UNKNOWN_ATTRIBUTE;
return false;
}
assert(glVisual);
assert(driContextPriv);
assert(screen);

View file

@ -458,6 +458,7 @@ extern GLboolean r100CreateContext( gl_api api,
unsigned major_version,
unsigned minor_version,
uint32_t flags,
bool notify_reset,
unsigned *error,
void *sharedContextPrivate);