From 681415e7f03c99f8d51852cd0b897c0357c16a38 Mon Sep 17 00:00:00 2001 From: Ilia Mirkin Date: Thu, 14 Jan 2016 13:44:54 -0500 Subject: [PATCH] st/mesa: use surface format to generate mipmaps when available This fixes the recently posted mipmap + texture views piglit test. Signed-off-by: Ilia Mirkin Cc: "11.0 11.1" Reviewed-by: Roland Scheidegger [Emil Velikov: resolve trivial conflicts] (cherry picked from commit e94ef885bb71b46aba4517523ebb63c0d4b36c4b) Signed-off-by: Emil Velikov Conflicts: src/mesa/state_tracker/st_gen_mipmap.c --- src/mesa/state_tracker/st_gen_mipmap.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/mesa/state_tracker/st_gen_mipmap.c b/src/mesa/state_tracker/st_gen_mipmap.c index b3700406df0..e8db070122d 100644 --- a/src/mesa/state_tracker/st_gen_mipmap.c +++ b/src/mesa/state_tracker/st_gen_mipmap.c @@ -80,6 +80,7 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target, struct st_texture_object *stObj = st_texture_object(texObj); struct pipe_resource *pt = st_get_texobj_resource(texObj); const uint baseLevel = texObj->BaseLevel; + enum pipe_format format; uint lastLevel, first_layer, last_layer; uint dstLevel; @@ -149,10 +150,15 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target, last_layer = util_max_layer(pt, baseLevel); } + if (stObj->surface_based) + format = stObj->surface_format; + else + format = pt->format; + /* Try to generate the mipmap by rendering/texturing. If that fails, * use the software fallback. */ - if (!util_gen_mipmap(st->pipe, pt, pt->format, baseLevel, lastLevel, + if (!util_gen_mipmap(st->pipe, pt, format, baseLevel, lastLevel, first_layer, last_layer, PIPE_TEX_FILTER_LINEAR)) { _mesa_generate_mipmap(ctx, target, texObj); }