TexStorage now updates texture object state needed by
ARB_texture_view extension.

Set appropriate TextureView state in texture object.
---
 src/mesa/main/texstorage.c | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/src/mesa/main/texstorage.c b/src/mesa/main/texstorage.c
index 84b8f82..4da3c91 100644
--- a/src/mesa/main/texstorage.c
+++ b/src/mesa/main/texstorage.c
@@ -436,8 +436,41 @@ texstorage(GLuint dims, GLenum target, GLsizei levels, 
GLenum internalformat,
          return;
       }
 
+      /* If the command is successful,
+       * TEXTURE_IMMUTABLE_FORMAT becomes TRUE.
+       * TEXTURE_IMMUTABLE_LEVELS and TEXTURE_VIEW_NUM_LEVELS become levels.
+       * If the texture target is TEXTURE_1D_ARRAY then
+       * TEXTURE_VIEW_NUM_LAYERS becomes height.
+       * If the texture target is TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP_ARRAY,
+       * or TEXTURE_2D_MULTISAMPLE_ARRAY then TEXTURE_VIEW_NUM_LAYERS becomes 
depth.
+       * If the texture target is TEXTURE_CUBE_MAP, then
+       * TEXTURE_VIEW_NUM_LAYERS becomes 6.
+       * For any other texture target, TEXTURE_VIEW_NUM_LAYERS becomes 1.
+       */
+
       texObj->Immutable = GL_TRUE;
       texObj->ImmutableLevels = levels;
+      texObj->MinLevel = 0;
+      texObj->NumLevels = levels;
+      texObj->MinLayer = 0;
+      texObj->NumLayers = 1;
+      switch (target)
+      {
+      case GL_TEXTURE_1D_ARRAY:
+         texObj->NumLayers = height;
+         break;
+
+      case GL_TEXTURE_2D_ARRAY:
+      case GL_TEXTURE_CUBE_MAP_ARRAY:
+      case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
+         texObj->NumLayers = depth;
+         break;
+
+      case GL_TEXTURE_CUBE_MAP:
+         texObj->NumLayers = 6;
+         break;
+      }
+
    }
 }
 
-- 
1.8.1.2

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to