[Mesa-dev] [PATCH 2/2] st/osmesa: add OSMesaCreateContextAttribs() function
Andreas Boll
andreas.boll.dev at gmail.com
Tue Dec 22 14:01:29 PST 2015
Sorry for being late...
Do you need to update the version scripts for this new function?
src/gallium/targets/osmesa/osmesa.{sym,def,mingw.def}
Andreas
2015-12-16 1:59 GMT+01:00 Brian Paul <brianp at vmware.com>:
> As with the previous commit, except for gallium.
> ---
> src/gallium/state_trackers/osmesa/osmesa.c | 96 +++++++++++++++++++++++++++++-
> 1 file changed, 93 insertions(+), 3 deletions(-)
>
> diff --git a/src/gallium/state_trackers/osmesa/osmesa.c b/src/gallium/state_trackers/osmesa/osmesa.c
> index 0f27ba8..ee78910 100644
> --- a/src/gallium/state_trackers/osmesa/osmesa.c
> +++ b/src/gallium/state_trackers/osmesa/osmesa.c
> @@ -544,11 +544,39 @@ GLAPI OSMesaContext GLAPIENTRY
> OSMesaCreateContextExt(GLenum format, GLint depthBits, GLint stencilBits,
> GLint accumBits, OSMesaContext sharelist)
> {
> + int attribs[100], n = 0;
> +
> + attribs[n++] = OSMESA_FORMAT;
> + attribs[n++] = format;
> + attribs[n++] = OSMESA_DEPTH_BITS;
> + attribs[n++] = depthBits;
> + attribs[n++] = OSMESA_STENCIL_BITS;
> + attribs[n++] = stencilBits;
> + attribs[n++] = OSMESA_ACCUM_BITS;
> + attribs[n++] = accumBits;
> + attribs[n++] = 0;
> +
> + return OSMesaCreateContextAttribs(attribs, sharelist);
> +}
> +
> +
> +/**
> + * New in Mesa 11.2
> + *
> + * Create context with attribute list.
> + */
> +GLAPI OSMesaContext GLAPIENTRY
> +OSMesaCreateContextAttribs(const int *attribList, OSMesaContext sharelist)
> +{
> OSMesaContext osmesa;
> struct st_context_iface *st_shared;
> enum st_context_error st_error = 0;
> struct st_context_attribs attribs;
> struct st_api *stapi = get_st_api();
> + GLenum format = GL_RGBA;
> + int depthBits = 0, stencilBits = 0, accumBits = 0;
> + int profile = OSMESA_COMPAT_PROFILE, version_major = 1, version_minor = 0;
> + int i;
>
> if (sharelist) {
> st_shared = sharelist->stctx;
> @@ -561,6 +589,64 @@ OSMesaCreateContextExt(GLenum format, GLint depthBits, GLint stencilBits,
> if (!osmesa)
> return NULL;
>
> + for (i = 0; attribList[i]; i += 2) {
> + switch (attribList[i]) {
> + case OSMESA_FORMAT:
> + format = attribList[i+1];
> + switch (format) {
> + case OSMESA_COLOR_INDEX:
> + case OSMESA_RGBA:
> + case OSMESA_BGRA:
> + case OSMESA_ARGB:
> + case OSMESA_RGB:
> + case OSMESA_BGR:
> + case OSMESA_RGB_565:
> + /* legal */
> + break;
> + default:
> + return NULL;
> + }
> + break;
> + case OSMESA_DEPTH_BITS:
> + depthBits = attribList[i+1];
> + if (depthBits < 0)
> + return NULL;
> + break;
> + case OSMESA_STENCIL_BITS:
> + stencilBits = attribList[i+1];
> + if (stencilBits < 0)
> + return NULL;
> + break;
> + case OSMESA_ACCUM_BITS:
> + accumBits = attribList[i+1];
> + if (accumBits < 0)
> + return NULL;
> + break;
> + case OSMESA_PROFILE:
> + profile = attribList[i+1];
> + if (profile != OSMESA_CORE_PROFILE &&
> + profile != OSMESA_COMPAT_PROFILE)
> + return NULL;
> + break;
> + case OSMESA_CONTEXT_MAJOR_VERSION:
> + version_major = attribList[i+1];
> + if (version_major < 1)
> + return NULL;
> + break;
> + case OSMESA_CONTEXT_MINOR_VERSION:
> + version_minor = attribList[i+1];
> + if (version_minor < 0)
> + return NULL;
> + break;
> + case 0:
> + /* end of list */
> + break;
> + default:
> + fprintf(stderr, "Bad attribute in OSMesaCreateContextAttribs()\n");
> + return NULL;
> + }
> + }
> +
> /* Choose depth/stencil/accum buffer formats */
> if (accumBits > 0) {
> osmesa->accum_format = PIPE_FORMAT_R16G16B16A16_SNORM;
> @@ -581,9 +667,11 @@ OSMesaCreateContextExt(GLenum format, GLint depthBits, GLint stencilBits,
> /*
> * Create the rendering context
> */
> - attribs.profile = ST_PROFILE_DEFAULT;
> - attribs.major = 2;
> - attribs.minor = 1;
> + memset(&attribs, 0, sizeof(attribs));
> + attribs.profile = (profile == OSMESA_CORE_PROFILE)
> + ? ST_PROFILE_OPENGL_CORE : ST_PROFILE_DEFAULT;
> + attribs.major = version_major;
> + attribs.minor = version_minor;
> attribs.flags = 0; /* ST_CONTEXT_FLAG_x */
> attribs.options.force_glsl_extensions_warn = FALSE;
> attribs.options.disable_blend_func_extended = FALSE;
> @@ -614,6 +702,7 @@ OSMesaCreateContextExt(GLenum format, GLint depthBits, GLint stencilBits,
> }
>
>
> +
> /**
> * Destroy an Off-Screen Mesa rendering context.
> *
> @@ -883,6 +972,7 @@ struct name_function
> static struct name_function functions[] = {
> { "OSMesaCreateContext", (OSMESAproc) OSMesaCreateContext },
> { "OSMesaCreateContextExt", (OSMESAproc) OSMesaCreateContextExt },
> + { "OSMesaCreateContextAttribs", (OSMESAproc) OSMesaCreateContextAttribs },
> { "OSMesaDestroyContext", (OSMESAproc) OSMesaDestroyContext },
> { "OSMesaMakeCurrent", (OSMESAproc) OSMesaMakeCurrent },
> { "OSMesaGetCurrentContext", (OSMESAproc) OSMesaGetCurrentContext },
> --
> 1.9.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list