This looks good, and so does the rest of the series AFAICS. Jose
----- Original Message ----- > From: Brian Paul <bri...@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@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev