diff options
author | Ian Romanick <[email protected]> | 2011-12-01 14:06:58 -0800 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2012-01-02 12:41:45 -0800 |
commit | e532b6288f01b63d8d8ba8c8dc08292967e65490 (patch) | |
tree | 03a7f53f966be06796251869d964cb341fa9a213 /src/gallium/state_trackers/dri/common | |
parent | 296fe21ae5be838268e51fdd9a4a3009ab961265 (diff) |
dri2: Add plumbing to get context version requirements and flags to drivers
This adds support for DRI_DRI2 version 3 to all of the DRI2 drivers.
Signed-off-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src/gallium/state_trackers/dri/common')
-rw-r--r-- | src/gallium/state_trackers/dri/common/dri_context.c | 51 | ||||
-rw-r--r-- | src/gallium/state_trackers/dri/common/dri_context.h | 4 |
2 files changed, 51 insertions, 4 deletions
diff --git a/src/gallium/state_trackers/dri/common/dri_context.c b/src/gallium/state_trackers/dri/common/dri_context.c index 3e5a040c69e..b47d8d92c7e 100644 --- a/src/gallium/state_trackers/dri/common/dri_context.c +++ b/src/gallium/state_trackers/dri/common/dri_context.c @@ -50,7 +50,12 @@ dri_pp_query(struct dri_context *ctx) GLboolean dri_create_context(gl_api api, const struct gl_config * visual, - __DRIcontext * cPriv, void *sharedContextPrivate) + __DRIcontext * cPriv, + unsigned major_version, + unsigned minor_version, + uint32_t flags, + unsigned *error, + void *sharedContextPrivate) { __DRIscreen *sPriv = cPriv->driScreenPriv; struct dri_screen *screen = dri_screen(sPriv); @@ -68,9 +73,20 @@ dri_create_context(gl_api api, const struct gl_config * visual, case API_OPENGLES2: attribs.profile = ST_PROFILE_OPENGL_ES2; break; - default: + case API_OPENGL: attribs.profile = ST_PROFILE_DEFAULT; + attribs.major = major_version; + attribs.minor = minor_version; + + if ((flags & __DRI_CTX_FLAG_DEBUG) != 0) + attribs.flags |= ST_CONTEXT_FLAG_DEBUG; + + if ((flags & __DRI_CTX_FLAG_FORWARD_COMPATIBLE) != 0) + attribs.flags |= ST_CONTEXT_FLAG_FORWARD_COMPATIBLE; break; + default: + *error = __DRI_CTX_ERROR_BAD_API; + goto fail; } if (sharedContextPrivate) { @@ -78,8 +94,10 @@ dri_create_context(gl_api api, const struct gl_config * visual, } ctx = CALLOC_STRUCT(dri_context); - if (ctx == NULL) + if (ctx == NULL) { + *error = __DRI_CTX_ERROR_NO_MEMORY; goto fail; + } cPriv->driverPrivate = ctx; ctx->cPriv = cPriv; @@ -91,8 +109,32 @@ dri_create_context(gl_api api, const struct gl_config * visual, dri_fill_st_visual(&attribs.visual, screen, visual); ctx->st = stapi->create_context(stapi, &screen->base, &attribs, &ctx_err, st_share); - if (ctx->st == NULL) + if (ctx->st == NULL) { + switch (ctx_err) { + case ST_CONTEXT_SUCCESS: + *error = __DRI_CTX_ERROR_SUCCESS; + break; + case ST_CONTEXT_ERROR_NO_MEMORY: + *error = __DRI_CTX_ERROR_NO_MEMORY; + break; + case ST_CONTEXT_ERROR_BAD_API: + *error = __DRI_CTX_ERROR_BAD_API; + break; + case ST_CONTEXT_ERROR_BAD_VERSION: + *error = __DRI_CTX_ERROR_BAD_VERSION; + break; + case ST_CONTEXT_ERROR_BAD_FLAG: + *error = __DRI_CTX_ERROR_BAD_FLAG; + break; + case ST_CONTEXT_ERROR_UNKNOWN_ATTRIBUTE: + *error = __DRI_CTX_ERROR_UNKNOWN_ATTRIBUTE; + break; + case ST_CONTEXT_ERROR_UNKNOWN_FLAG: + *error = __DRI_CTX_ERROR_UNKNOWN_FLAG; + break; + } goto fail; + } ctx->st->st_manager_private = (void *) ctx; ctx->stapi = stapi; @@ -101,6 +143,7 @@ dri_create_context(gl_api api, const struct gl_config * visual, ctx->pp = pp_init(screen->base.screen, ctx->pp_enabled); + *error = __DRI_CTX_ERROR_SUCCESS; return GL_TRUE; fail: diff --git a/src/gallium/state_trackers/dri/common/dri_context.h b/src/gallium/state_trackers/dri/common/dri_context.h index 5fc81194ddd..484b756fc09 100644 --- a/src/gallium/state_trackers/dri/common/dri_context.h +++ b/src/gallium/state_trackers/dri/common/dri_context.h @@ -88,6 +88,10 @@ boolean dri_create_context(gl_api api, const struct gl_config * visual, __DRIcontext * driContextPriv, + unsigned major_version, + unsigned minor_version, + uint32_t flags, + unsigned *error, void *sharedContextPrivate); #endif |