mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 06:40:08 +01:00
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:
parent
916bc4491a
commit
17c94de33b
12 changed files with 49 additions and 2 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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__);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue