st/mesa: check texture target in allocate_full_mipmap()
authorBrian Paul <brianp@vmware.com>
Thu, 17 Dec 2015 21:16:24 +0000 (14:16 -0700)
committerBrian Paul <brianp@vmware.com>
Wed, 6 Jan 2016 22:53:47 +0000 (15:53 -0700)
Some kinds of textures never have mipmaps.  3D textures seldom have
mipmaps.

Reviewed-by: José Fonseca <jfonseca@vmware.com>
src/mesa/state_tracker/st_cb_texture.c

index 867d4da..f8b3679 100644 (file)
@@ -404,6 +404,16 @@ static boolean
 allocate_full_mipmap(const struct st_texture_object *stObj,
                      const struct st_texture_image *stImage)
 {
+   switch (stObj->base.Target) {
+   case GL_TEXTURE_RECTANGLE_NV:
+   case GL_TEXTURE_BUFFER:
+   case GL_TEXTURE_EXTERNAL_OES:
+   case GL_TEXTURE_2D_MULTISAMPLE:
+   case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
+      /* these texture types cannot be mipmapped */
+      return FALSE;
+   }
+
    if (stImage->base.Level > 0 || stObj->base.GenerateMipmap)
       return TRUE;
 
@@ -420,6 +430,10 @@ allocate_full_mipmap(const struct st_texture_object *stObj,
       /* not a mipmap minification filter */
       return FALSE;
 
+   if (stObj->base.Target == GL_TEXTURE_3D)
+      /* 3D textures are seldom mipmapped */
+      return FALSE;
+
    return TRUE;
 }