[Mesa-dev] [PATCH 2/2] st/mesa: simplify st_generate_mipmap()
Jose Fonseca
jfonseca at vmware.com
Tue Mar 29 14:51:50 UTC 2016
On 26/03/16 17:21, Brian Paul wrote:
> The whole st_generate_mipmap() function was overly complicated. Now
> we just call the new _mesa_prepare_mipmap_levels() function to prepare
> the texture mipmap memory, then call the generate function which fills
> in the texture images.
>
> This fixes a failed assertion in llvmpipe/softpipe which is hit with the
> new piglit generatemipmap-base-change test. Also fixes some device errors
> (format mismatches) with the VMware svga driver.
> ---
> src/mesa/state_tracker/st_gen_mipmap.c | 102 ++++++++-------------------------
> 1 file changed, 24 insertions(+), 78 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_gen_mipmap.c b/src/mesa/state_tracker/st_gen_mipmap.c
> index c4b3492..d854e20 100644
> --- a/src/mesa/state_tracker/st_gen_mipmap.c
> +++ b/src/mesa/state_tracker/st_gen_mipmap.c
> @@ -82,7 +82,6 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
> const uint baseLevel = texObj->BaseLevel;
> enum pipe_format format;
> uint lastLevel, first_layer, last_layer;
> - uint dstLevel;
>
> if (!pt)
> return;
> @@ -103,42 +102,33 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
> stObj->lastLevel = lastLevel;
>
> if (!texObj->Immutable) {
> - if (pt->last_level < lastLevel) {
> - /* The current gallium texture doesn't have space for all the
> - * mipmap levels we need to generate. So allocate a new texture.
> - */
> - struct pipe_resource *oldTex = stObj->pt;
> -
> - /* create new texture with space for more levels */
> - stObj->pt = st_texture_create(st,
> - oldTex->target,
> - oldTex->format,
> - lastLevel,
> - oldTex->width0,
> - oldTex->height0,
> - oldTex->depth0,
> - oldTex->array_size,
> - 0,
> - oldTex->bind);
> -
> - /* This will copy the old texture's base image into the new texture
> - * which we just allocated.
> - */
> - st_finalize_texture(ctx, st->pipe, texObj);
> -
> - /* release the old tex (will likely be freed too) */
> - pipe_resource_reference(&oldTex, NULL);
> - st_texture_release_all_sampler_views(st, stObj);
> - }
> - else {
> - /* Make sure that the base texture image data is present in the
> - * texture buffer.
> - */
> - st_finalize_texture(ctx, st->pipe, texObj);
> - }
> + const GLboolean genSave = texObj->GenerateMipmap;
> +
> + /* Temporarily set GenerateMipmap to true so that allocate_full_mipmap()
> + * makes the right decision about full mipmap allocation.
> + */
> + texObj->GenerateMipmap = GL_TRUE;
I wonder if there's any assertion we could add somewhere to ensure it
did indeed make the right decision.
Either way, series is:
Reviewed-by: Jose Fonseca <jfonseca at vmware.com>
More information about the mesa-dev
mailing list