[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