summaryrefslogtreecommitdiffstats
path: root/src/mesa/state_tracker
diff options
context:
space:
mode:
authorIlia Mirkin <[email protected]>2016-01-14 13:44:54 -0500
committerIlia Mirkin <[email protected]>2016-01-14 14:28:04 -0500
commite94ef885bb71b46aba4517523ebb63c0d4b36c4b (patch)
tree9f3f53b2f7c599491813ea81d9c09e467dd34a0e /src/mesa/state_tracker
parentdc96a18d24409102e36cdfd7de0552f66c3925bf (diff)
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 <[email protected]> Cc: "11.0 11.1" <[email protected]> Reviewed-by: Roland Scheidegger <[email protected]>
Diffstat (limited to 'src/mesa/state_tracker')
-rw-r--r--src/mesa/state_tracker/st_gen_mipmap.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/mesa/state_tracker/st_gen_mipmap.c b/src/mesa/state_tracker/st_gen_mipmap.c
index 3e6c0a73bc7..c4b3492b0d3 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,16 +150,21 @@ 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;
+
/* First see if the driver supports hardware mipmap generation,
* if not then generate the mipmap by rendering/texturing.
* If that fails, use the software fallback.
*/
if (!st->pipe->screen->get_param(st->pipe->screen,
PIPE_CAP_GENERATE_MIPMAP) ||
- !st->pipe->generate_mipmap(st->pipe, pt, pt->format, baseLevel,
+ !st->pipe->generate_mipmap(st->pipe, pt, format, baseLevel,
lastLevel, first_layer, last_layer)) {
- 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);
}