Browse Source

dri_util: Don't assume __DRIcontext->driverPrivate is a gl_context

The driverPrivate pointer is opaque to the driver and we can't assume
it's a struct gl_context in dri_util.c.  Instead provide a helper function
to set the struct gl_context flags from the incoming DRI context flags.

v2 (idr): Modify the other classic drivers to also use
driContextSetFlags.  I ran all the piglit GLX_ARB_create_context tests
with i965 and classic swrast without regressions.

Signed-off-by: Kristian Høgsberg <krh@bitplanet.net>
Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> [v1]
Reviewed-by: Eric Anholt <eric@anholt.net>
Tested-by: Ilia Mirkin <imirkin@alum.mit.edu> [v1 on Gallium nouveau]
Cc: "10.0" <mesa-stable@lists.freedesktop.org>
tags/mesa-10.1-rc1
Kristian Høgsberg 12 years ago
parent
commit
38366c0c6e

+ 7
- 4
src/mesa/drivers/dri/common/dri_util.c View File

@@ -438,16 +438,19 @@ driCreateContextAttribs(__DRIscreen *screen, int api,
return NULL;
}

struct gl_context *ctx = context->driverPrivate;
*error = __DRI_CTX_ERROR_SUCCESS;
return context;
}

void
driContextSetFlags(struct gl_context *ctx, uint32_t flags)
{
if ((flags & __DRI_CTX_FLAG_FORWARD_COMPATIBLE) != 0)
ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT;
if ((flags & __DRI_CTX_FLAG_DEBUG) != 0) {
ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_DEBUG_BIT;
ctx->Debug.DebugOutput = GL_TRUE;
}

*error = __DRI_CTX_ERROR_SUCCESS;
return context;
}

static __DRIcontext *

+ 3
- 0
src/mesa/drivers/dri/common/dri_util.h View File

@@ -292,6 +292,9 @@ dri2InvalidateDrawable(__DRIdrawable *drawable);
extern void
driUpdateFramebufferSize(struct gl_context *ctx, const __DRIdrawable *dPriv);

extern void
driContextSetFlags(struct gl_context *ctx, uint32_t flags);

extern const __DRIimageDriverExtension driImageDriverExtension;

#endif /* _DRI_UTIL_H_ */

+ 2
- 1
src/mesa/drivers/dri/i915/i830_context.c View File

@@ -56,6 +56,7 @@ i830CreateContext(int api,
__DRIcontext * driContextPriv,
unsigned major_version,
unsigned minor_version,
uint32_t flags,
unsigned *error,
void *sharedContextPrivate)
{
@@ -73,7 +74,7 @@ i830CreateContext(int api,
i830InitDriverFunctions(&functions);

if (!intelInitContext(intel, __DRI_API_OPENGL,
major_version, minor_version,
major_version, minor_version, flags,
mesaVis, driContextPriv,
sharedContextPrivate, &functions,
error)) {

+ 1
- 0
src/mesa/drivers/dri/i915/i830_context.h View File

@@ -183,6 +183,7 @@ i830CreateContext(int api,
__DRIcontext * driContextPriv,
unsigned major_version,
unsigned minor_version,
uint32_t flags,
unsigned *error,
void *sharedContextPrivate);


+ 2
- 1
src/mesa/drivers/dri/i915/i915_context.c View File

@@ -151,6 +151,7 @@ i915CreateContext(int api,
__DRIcontext * driContextPriv,
unsigned major_version,
unsigned minor_version,
uint32_t flags,
unsigned *error,
void *sharedContextPrivate)
{
@@ -168,7 +169,7 @@ i915CreateContext(int api,

i915InitDriverFunctions(&functions);

if (!intelInitContext(intel, api, major_version, minor_version,
if (!intelInitContext(intel, api, major_version, minor_version, flags,
mesaVis, driContextPriv,
sharedContextPrivate, &functions,
error)) {

+ 1
- 0
src/mesa/drivers/dri/i915/i915_context.h View File

@@ -324,6 +324,7 @@ extern bool i915CreateContext(int api,
__DRIcontext * driContextPriv,
unsigned major_version,
unsigned minor_version,
uint32_t flags,
unsigned *error,
void *sharedContextPrivate);


+ 1
- 0
src/mesa/drivers/dri/i915/intel_context.c View File

@@ -409,6 +409,7 @@ intelInitContext(struct intel_context *intel,
int api,
unsigned major_version,
unsigned minor_version,
uint32_t flags,
const struct gl_config * mesaVis,
__DRIcontext * driContextPriv,
void *sharedContextPrivate,

+ 1
- 0
src/mesa/drivers/dri/i915/intel_context.h View File

@@ -401,6 +401,7 @@ extern bool intelInitContext(struct intel_context *intel,
int api,
unsigned major_version,
unsigned minor_version,
uint32_t flags,
const struct gl_config * mesaVis,
__DRIcontext * driContextPriv,
void *sharedContextPrivate,

+ 6
- 4
src/mesa/drivers/dri/i915/intel_screen.c View File

@@ -931,6 +931,7 @@ i830CreateContext(int api,
__DRIcontext *driContextPriv,
unsigned major_version,
unsigned minor_version,
uint32_t flags,
unsigned *error,
void *sharedContextPrivate);

@@ -940,6 +941,7 @@ i915CreateContext(int api,
__DRIcontext *driContextPriv,
unsigned major_version,
unsigned minor_version,
uint32_t flags,
unsigned *error,
void *sharedContextPrivate);

@@ -971,13 +973,13 @@ intelCreateContext(gl_api api,

if (IS_9XX(intelScreen->deviceID)) {
success = i915CreateContext(api, mesaVis, driContextPriv,
major_version, minor_version, error,
sharedContextPrivate);
major_version, minor_version, flags,
error, sharedContextPrivate);
} else {
intelScreen->no_vbo = true;
success = i830CreateContext(api, mesaVis, driContextPriv,
major_version, minor_version, error,
sharedContextPrivate);
major_version, minor_version, flags,
error, sharedContextPrivate);
}

if (success)

+ 2
- 0
src/mesa/drivers/dri/i965/brw_context.c View File

@@ -631,6 +631,8 @@ brwCreateContext(gl_api api,
return false;
}

driContextSetFlags(ctx, flags);

/* Initialize the software rasterizer and helper modules.
*
* As of GL 3.1 core, the gen4+ driver doesn't need the swrast context for

+ 2
- 0
src/mesa/drivers/dri/nouveau/nouveau_context.c View File

@@ -78,6 +78,8 @@ nouveau_context_create(gl_api api,
return GL_FALSE;
}

driContextSetFlags(ctx, flags);

nctx = to_nouveau_context(ctx);
nctx->dri_context = dri_ctx;
dri_ctx->driverPrivate = ctx;

+ 2
- 0
src/mesa/drivers/dri/r200/r200_context.c View File

@@ -279,6 +279,8 @@ GLboolean r200CreateContext( gl_api api,
return GL_FALSE;
}

driContextSetFlags(ctx, flags);

rmesa->radeon.swtcl.RenderIndex = ~0;
rmesa->radeon.hw.all_dirty = 1;


+ 2
- 0
src/mesa/drivers/dri/radeon/radeon_context.c View File

@@ -242,6 +242,8 @@ r100CreateContext( gl_api api,
return GL_FALSE;
}

driContextSetFlags(ctx, flags);

rmesa->radeon.swtcl.RenderIndex = ~0;
rmesa->radeon.hw.all_dirty = GL_TRUE;


+ 2
- 0
src/mesa/drivers/dri/swrast/swrast.c View File

@@ -705,6 +705,8 @@ dri_create_context(gl_api api,
goto context_fail;
}

driContextSetFlags(ctx, flags);

/* do bounds checking to prevent segfaults and server crashes! */
mesaCtx->Const.CheckArrayBounds = GL_TRUE;


Loading…
Cancel
Save