From: Marek Olšák <marek.ol...@amd.com> --- src/mesa/state_tracker/st_cb_texture.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index 0edb3ea5c7e..1ace61863ff 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -516,20 +516,32 @@ allocate_full_mipmap(const struct st_texture_object *stObj, return FALSE; if (stObj->base.BaseLevel == 0 && stObj->base.MaxLevel == 0) return FALSE; if (stObj->base.Sampler.MinFilter == GL_NEAREST || stObj->base.Sampler.MinFilter == GL_LINEAR) /* not a mipmap minification filter */ return FALSE; + /* If the following sequence of GL calls is used: + * glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, ... + * glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + * + * we would needlessly allocate a mipmapped texture, because the initial + * MinFilter is GL_NEAREST_MIPMAP_LINEAR. Catch this case and don't + * allocate a mipmapped texture by default. This may cause texture + * reallocation later, but GL_NEAREST_MIPMAP_LINEAR is pretty rare. + */ + if (stObj->base.Sampler.MinFilter == GL_NEAREST_MIPMAP_LINEAR) + return FALSE; + if (stObj->base.Target == GL_TEXTURE_3D) /* 3D textures are seldom mipmapped */ return FALSE; return TRUE; } /** * Try to allocate a pipe_resource object for the given st_texture_object. -- 2.17.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev