Merge branch 'mesa_7_7_branch'
[mesa.git] / src / mesa / drivers / dri / common / texmem.h
index 266afd8bb66d3d0664cec6c8fe432c9c4ade7c68..725ba2e11966003253d777c94b710651d1b8f1bb 100644 (file)
@@ -28,7 +28,6 @@
  *    Kevin E. Martin <kem@users.sourceforge.net>
  *    Gareth Hughes <gareth@nvidia.com>
  */
-/* $XFree86:$ */
 
 /** \file texmem.h
  * Public interface to the DRI texture memory management routines.
@@ -39,8 +38,9 @@
 #ifndef DRI_TEXMEM_H
 #define DRI_TEXMEM_H
 
-#include "mtypes.h"
-#include "mm.h"
+#include "main/mtypes.h"
+#include "main/formats.h"
+#include "main/mm.h"
 #include "xf86drm.h"
 
 struct dri_tex_heap;
@@ -66,8 +66,14 @@ struct dri_texture_object {
                                         * texture memory in use by another context.
                                         * A placeholder should have a heap and a memBlock.
                                         */
-       PMemBlock   memBlock;           /**< Memory block containing texture */
-       unsigned    bound;              /**< Texture unit currently bound to */
+       struct mem_block *memBlock;     /**< Memory block containing texture */
+
+        unsigned    reserved;          /**< Cannot be swapped out by user contexts.  */
+
+       unsigned    bound;              /**< Bitmask indicating which tex units
+                                        * this texture object is bound to.
+                                        * Bit 0 = unit 0, Bit 1 = unit 1, etc
+                                        */
 
        unsigned    totalSize;          /**< Total size of the texture,
                                         * including all mipmap levels 
@@ -170,7 +176,7 @@ struct dri_tex_heap {
        /** Memory heap used to manage texture memory represented by
         * this texture heap.
         */
-       memHeap_t    * memory_heap;
+       struct mem_block * memory_heap;
 
        /** List of objects that we currently believe to be in texture
         * memory.
@@ -216,6 +222,23 @@ struct dri_tex_heap {
         * framebuffer.  
         */
         unsigned timestamp;
+
+       /** \brief Kick/upload weight
+        *
+        * When not enough free space is available this weight
+        * influences the choice of the heap from which textures are
+        * kicked. By default the weight is equal to the heap size.
+        */
+       double weight;
+
+       /** \brief Kick/upload duty
+        *
+        * The heap with the highest duty will be chosen for kicking
+        * textures if not enough free space is available. The duty is
+        * reduced by the amount of data kicked. Rebalancing of
+        * negative duties takes the weights into account.
+        */
+       int duty;
 };
 
 
@@ -268,13 +291,14 @@ void
 driCalculateMaxTextureLevels( driTexHeap * const * heaps,
                              unsigned nr_heaps,
                              struct gl_constants * limits,
-                             unsigned max_bytes_per_texel, 
+                             unsigned max_bytes_per_texel,
                              unsigned max_2D_size,
                              unsigned max_3D_size,
                              unsigned max_cube_size,
                              unsigned max_rect_size,
                              unsigned mipmaps_at_once,
-                             int all_textures_one_heap );
+                             int all_textures_one_heap,
+                             int allow_larger_textures );
 
 void
 driSetTextureSwapCounterLocation( driTexHeap * heap, unsigned * counter );
@@ -294,16 +318,16 @@ GLboolean driValidateTextureHeaps( driTexHeap * const * texture_heaps,
 extern void driCalculateTextureFirstLastLevel( driTextureObject * t );
 
 
-extern const struct gl_texture_format *_dri_texformat_rgba8888;
-extern const struct gl_texture_format *_dri_texformat_argb8888;
-extern const struct gl_texture_format *_dri_texformat_rgb565;
-extern const struct gl_texture_format *_dri_texformat_argb4444;
-extern const struct gl_texture_format *_dri_texformat_argb1555;
-extern const struct gl_texture_format *_dri_texformat_al88;
-extern const struct gl_texture_format *_dri_texformat_a8;
-extern const struct gl_texture_format *_dri_texformat_ci8;
-extern const struct gl_texture_format *_dri_texformat_i8;
-extern const struct gl_texture_format *_dri_texformat_l8;
+extern gl_format _dri_texformat_rgba8888;
+extern gl_format _dri_texformat_argb8888;
+extern gl_format _dri_texformat_rgb565;
+extern gl_format _dri_texformat_argb4444;
+extern gl_format _dri_texformat_argb1555;
+extern gl_format _dri_texformat_al88;
+extern gl_format _dri_texformat_a8;
+extern gl_format _dri_texformat_ci8;
+extern gl_format _dri_texformat_i8;
+extern gl_format _dri_texformat_l8;
 
 extern void driInitTextureFormats( void );