[Mesa-dev] [PATCH 12/15] st/mesa: implement GL_ARB_texture_storage

Jose Fonseca jfonseca at vmware.com
Wed Oct 26 23:10:28 PDT 2011


This looks good, and so does the rest of the series AFAICS.

Jose

----- Original Message -----
> From: Brian Paul <brianp at vmware.com>
> 
> ---
>  src/mesa/state_tracker/st_cb_texture.c |   62
>  ++++++++++++++++++++++++++++++++
>  src/mesa/state_tracker/st_extensions.c |    1 +
>  2 files changed, 63 insertions(+), 0 deletions(-)
> 
> diff --git a/src/mesa/state_tracker/st_cb_texture.c
> b/src/mesa/state_tracker/st_cb_texture.c
> index 169e235..1735b8e 100644
> --- a/src/mesa/state_tracker/st_cb_texture.c
> +++ b/src/mesa/state_tracker/st_cb_texture.c
> @@ -1894,6 +1894,66 @@ st_get_default_texture(struct st_context *st)
>  }
>  
>  
> +/**
> + * Called via ctx->Driver.AllocTextureStorage() to allocate texture
> memory
> + * for a whole mipmap stack.
> + */
> +static GLboolean
> +st_AllocTextureStorage(struct gl_context *ctx,
> +                       struct gl_texture_object *texObj,
> +                       GLsizei levels, GLsizei width,
> +                       GLsizei height, GLsizei depth)
> +{
> +   const GLuint numFaces = (texObj->Target == GL_TEXTURE_CUBE_MAP) ?
> 6 : 1;
> +   struct st_context *st = st_context(ctx);
> +   struct st_texture_object *stObj = st_texture_object(texObj);
> +   GLuint ptWidth, ptHeight, ptDepth, ptLayers, bindings;
> +   enum pipe_format fmt;
> +   GLint level;
> +
> +   assert(levels > 0);
> +
> +   /* Save the level=0 dimensions */
> +   stObj->width0 = width;
> +   stObj->height0 = height;
> +   stObj->depth0 = depth;
> +   stObj->lastLevel = levels - 1;
> +
> +   fmt =
> st_mesa_format_to_pipe_format(texObj->Image[0][0]->TexFormat);
> +
> +   bindings = default_bindings(st, fmt);
> +
> +   st_gl_texture_dims_to_pipe_dims(texObj->Target,
> +                                   width, height, depth,
> +                                   &ptWidth, &ptHeight, &ptDepth,
> &ptLayers);
> +
> +   stObj->pt = st_texture_create(st,
> +                                 gl_target_to_pipe(texObj->Target),
> +                                 fmt,
> +                                 levels,
> +                                 ptWidth,
> +                                 ptHeight,
> +                                 ptDepth,
> +                                 ptLayers,
> +                                 bindings);
> +   if (!stObj->pt)
> +      return GL_FALSE;
> +
> +   /* Set image resource pointers */
> +   for (level = 0; level < levels; level++) {
> +      GLuint face;
> +      for (face = 0; face < numFaces; face++) {
> +         struct st_texture_image *stImage =
> +            st_texture_image(texObj->Image[face][level]);
> +         pipe_resource_reference(&stImage->pt, stObj->pt);
> +      }
> +   }
> +
> +   return GL_TRUE;
> +}
> +
> +
> +
>  void
>  st_init_texture_functions(struct dd_function_table *functions)
>  {
> @@ -1931,4 +1991,6 @@ st_init_texture_functions(struct
> dd_function_table *functions)
>  
>     /* XXX Temporary until we can query pipe's texture sizes */
>     functions->TestProxyTexImage = _mesa_test_proxy_teximage;
> +
> +   functions->AllocTextureStorage = st_AllocTextureStorage;
>  }
> diff --git a/src/mesa/state_tracker/st_extensions.c
> b/src/mesa/state_tracker/st_extensions.c
> index 37f36de..6d9ddf5 100644
> --- a/src/mesa/state_tracker/st_extensions.c
> +++ b/src/mesa/state_tracker/st_extensions.c
> @@ -262,6 +262,7 @@ void st_init_extensions(struct st_context *st)
>     ctx->Extensions.ARB_texture_env_combine = GL_TRUE;
>     ctx->Extensions.ARB_texture_env_crossbar = GL_TRUE;
>     ctx->Extensions.ARB_texture_env_dot3 = GL_TRUE;
> +   ctx->Extensions.ARB_texture_storage = GL_TRUE;
>     ctx->Extensions.ARB_vertex_array_object = GL_TRUE;
>     ctx->Extensions.ARB_vertex_program = GL_TRUE;
>     ctx->Extensions.ARB_window_pos = GL_TRUE;
> --
> 1.7.3.4
> 
> _______________________________________________
> 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