[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