Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (C) 2008 Nicolai Haehnle.
  3.  *
  4.  * All Rights Reserved.
  5.  *
  6.  * Permission is hereby granted, free of charge, to any person obtaining
  7.  * a copy of this software and associated documentation files (the
  8.  * "Software"), to deal in the Software without restriction, including
  9.  * without limitation the rights to use, copy, modify, merge, publish,
  10.  * distribute, sublicense, and/or sell copies of the Software, and to
  11.  * permit persons to whom the Software is furnished to do so, subject to
  12.  * the following conditions:
  13.  *
  14.  * The above copyright notice and this permission notice (including the
  15.  * next paragraph) shall be included in all copies or substantial
  16.  * portions of the Software.
  17.  *
  18.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  19.  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  20.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  21.  * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
  22.  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  23.  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  24.  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  25.  *
  26.  */
  27.  
  28. #ifndef __RADEON_MIPMAP_TREE_H_
  29. #define __RADEON_MIPMAP_TREE_H_
  30.  
  31. #include "radeon_common.h"
  32.  
  33. typedef struct _radeon_mipmap_tree radeon_mipmap_tree;
  34. typedef struct _radeon_mipmap_level radeon_mipmap_level;
  35. typedef struct _radeon_mipmap_image radeon_mipmap_image;
  36.  
  37. struct _radeon_mipmap_image {
  38.         GLuint offset; /** Offset of this image from the start of mipmap tree buffer, in bytes */
  39. };
  40.  
  41. struct _radeon_mipmap_level {
  42.         GLuint width;
  43.         GLuint height;
  44.         GLuint depth;
  45.         GLuint size; /** Size of each image, in bytes */
  46.         GLuint rowstride; /** in bytes */
  47.         GLuint valid;
  48.         radeon_mipmap_image faces[6];
  49. };
  50.  
  51. /* store the max possible in the miptree */
  52. #define RADEON_MIPTREE_MAX_TEXTURE_LEVELS 15
  53.  
  54. /**
  55.  * A mipmap tree contains texture images in the layout that the hardware
  56.  * expects.
  57.  *
  58.  * The meta-data of mipmap trees is immutable, i.e. you cannot change the
  59.  * layout on-the-fly; however, the texture contents (i.e. texels) can be
  60.  * changed.
  61.  */
  62. struct _radeon_mipmap_tree {
  63.         struct radeon_bo *bo;
  64.         GLuint refcount;
  65.  
  66.         GLuint totalsize; /** total size of the miptree, in bytes */
  67.  
  68.         GLenum target; /** GL_TEXTURE_xxx */
  69.         GLenum mesaFormat; /** MESA_FORMAT_xxx */
  70.         GLuint faces; /** # of faces: 6 for cubemaps, 1 otherwise */
  71.         GLuint baseLevel; /** gl_texture_object->baseLevel it was created for */
  72.         GLuint numLevels; /** Number of mip levels stored in this mipmap tree */
  73.  
  74.         GLuint width0; /** Width of baseLevel image */
  75.         GLuint height0; /** Height of baseLevel image */
  76.         GLuint depth0; /** Depth of baseLevel image */
  77.  
  78.         GLuint tilebits; /** RADEON_TXO_xxx_TILE */
  79.  
  80.         radeon_mipmap_level levels[RADEON_MIPTREE_MAX_TEXTURE_LEVELS];
  81. };
  82.  
  83. void radeon_miptree_reference(radeon_mipmap_tree *mt, radeon_mipmap_tree **ptr);
  84. void radeon_miptree_unreference(radeon_mipmap_tree **ptr);
  85.  
  86. GLboolean radeon_miptree_matches_image(radeon_mipmap_tree *mt,
  87.                                        struct gl_texture_image *texImage);
  88.                                        
  89. void radeon_try_alloc_miptree(radeonContextPtr rmesa, radeonTexObj *t);
  90. GLuint radeon_miptree_image_offset(radeon_mipmap_tree *mt,
  91.                                    GLuint face, GLuint level);
  92. uint32_t get_base_teximage_offset(radeonTexObj *texObj);
  93.  
  94. unsigned get_texture_image_row_stride(radeonContextPtr rmesa, gl_format format, unsigned width, unsigned tiling, unsigned target);
  95.  
  96. unsigned get_texture_image_size(
  97.                 gl_format format,
  98.                 unsigned rowStride,
  99.                 unsigned height,
  100.                 unsigned depth,
  101.                 unsigned tiling);
  102.  
  103. radeon_mipmap_tree *radeon_miptree_create(radeonContextPtr rmesa,
  104.                                           GLenum target, gl_format mesaFormat, GLuint baseLevel, GLuint numLevels,
  105.                                           GLuint width0, GLuint height0, GLuint depth0, GLuint tilebits);
  106. #endif /* __RADEON_MIPMAP_TREE_H_ */
  107.