mesa: Introduce a globally-available minify() macro.
authorEric Anholt <eric@anholt.net>
Sat, 13 Apr 2013 08:46:09 +0000 (01:46 -0700)
committerEric Anholt <eric@anholt.net>
Sun, 21 Apr 2013 19:28:04 +0000 (12:28 -0700)
This matches u_minify()'s behavior, for consistency.

Reviewed-by: Brian Paul <brianp@vmware.com>
src/mesa/drivers/dri/i915/i915_tex_layout.c
src/mesa/drivers/dri/i965/brw_tex_layout.c
src/mesa/drivers/dri/intel/intel_tex_layout.c
src/mesa/drivers/dri/intel/intel_tex_layout.h
src/mesa/drivers/dri/nouveau/nouveau_texture.c
src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c
src/mesa/main/macros.h

index 90911a647c7a6f530b758d038ca6e645fc1d019a..8be601b9296a08320e4959764687320039bbb2c3 100644 (file)
@@ -172,9 +172,9 @@ i915_miptree_layout_3d(struct intel_mipmap_tree * mt)
 
       stack_height += MAX2(2, height);
 
-      width = minify(width);
-      height = minify(height);
-      depth = minify(depth);
+      width = minify(width, 1);
+      height = minify(height, 1);
+      depth = minify(depth, 1);
    }
 
    /* Fixup depth image_offsets: */
@@ -186,7 +186,7 @@ i915_miptree_layout_3d(struct intel_mipmap_tree * mt)
                                        0, i * stack_height);
       }
 
-      depth = minify(depth);
+      depth = minify(depth, 1);
    }
 
    /* Multiply slice size by texture depth for total size.  It's
@@ -219,8 +219,8 @@ i915_miptree_layout_2d(struct intel_mipmap_tree * mt)
 
       mt->total_height += img_height;
 
-      width = minify(width);
-      height = minify(height);
+      width = minify(width, 1);
+      height = minify(height, 1);
    }
 }
 
@@ -447,9 +447,9 @@ i945_miptree_layout_3d(struct intel_mipmap_tree * mt)
         pack_y_pitch >>= 1;
       }
 
-      width = minify(width);
-      height = minify(height);
-      depth = minify(depth);
+      width = minify(width, 1);
+      height = minify(height, 1);
+      depth = minify(depth, 1);
    }
 }
 
index d28e5aff009f4f0d8c396548df027018d88412f7..f0736fa976f10a2224f949278ae45fb6562bbe2d 100644 (file)
@@ -48,7 +48,7 @@ brw_miptree_layout_texture_array(struct intel_context *intel,
    int h0, h1, q;
 
    h0 = ALIGN(mt->physical_height0, mt->align_h);
-   h1 = ALIGN(minify(mt->physical_height0), mt->align_h);
+   h1 = ALIGN(minify(mt->physical_height0, 1), mt->align_h);
    if (mt->array_spacing_lod0)
       qpitch = h0;
    else
@@ -131,10 +131,10 @@ brw_miptree_layout(struct intel_context *intel, struct intel_mipmap_tree *mt)
 
 
         mt->total_height += y;
-        width  = minify(width);
-        height = minify(height);
+        width  = minify(width, 1);
+        height = minify(height, 1);
         if (mt->target == GL_TEXTURE_3D)
-           depth = minify(depth);
+           depth = minify(depth, 1);
 
         if (mt->compressed) {
            pack_y_pitch = (height + 3) / 4;
index 59d4bc319fea41975c057d81ce9dd26cbeec6c01..fbb6520e7a1f62d9213e473d37a80e07bb68a7d3 100644 (file)
@@ -170,11 +170,11 @@ void i945_miptree_layout_2d(struct intel_mipmap_tree *mt)
        GLuint mip1_width;
 
        if (mt->compressed) {
-           mip1_width = ALIGN(minify(mt->physical_width0), mt->align_w)
-               + ALIGN(minify(minify(mt->physical_width0)), mt->align_w);
+          mip1_width = ALIGN(minify(mt->physical_width0, 1), mt->align_w) +
+             ALIGN(minify(mt->physical_width0, 2), mt->align_w);
        } else {
-           mip1_width = ALIGN(minify(mt->physical_width0), mt->align_w)
-               + minify(minify(mt->physical_width0));
+          mip1_width = ALIGN(minify(mt->physical_width0, 1), mt->align_w) +
+             minify(mt->physical_width0, 2);
        }
 
        if (mip1_width > mt->total_width) {
@@ -208,7 +208,7 @@ void i945_miptree_layout_2d(struct intel_mipmap_tree *mt)
         y += img_height;
       }
 
-      width  = minify(width);
-      height = minify(height);
+      width  = minify(width, 1);
+      height = minify(height, 1);
    }
 }
index 12ed16d82166683ab609e2ee8d760f1d14fb0b2d..f353cf4eb43f9242811b7edebc685f5a1a0136cf 100644 (file)
 
 #include "main/macros.h"
 
-
-static INLINE GLuint minify( GLuint d )
-{
-   return MAX2(1, d>>1);
-}
-
 extern void i945_miptree_layout_2d(struct intel_mipmap_tree *mt);
 
 void
index 64cd23b3851e987cb29a9e616e39835a440fb79c..4e3c26bab87c9956c76056c8ca8300094fc1c9fa 100644 (file)
@@ -411,8 +411,8 @@ relayout_texture(struct gl_context *ctx, struct gl_texture_object *t)
                        };
 
                        offset += size;
-                       width = MAX2(1, width / 2);
-                       height = MAX2(1, height / 2);
+                       width = minify(width, 1);
+                       height = minify(height, 1);
                }
 
                /* Get new storage. */
index b0c49baf2b3867f00c0068a424b0568885423334..ebf6a194cc974421f5079920f88f0e6e53a4c727 100644 (file)
@@ -147,15 +147,6 @@ static void compute_tex_image_offset(radeonContextPtr rmesa, radeon_mipmap_tree
                        lvl->rowstride, lvl->width, height, lvl->faces[face].offset);
 }
 
-static GLuint minify(GLuint size, GLuint levels)
-{
-       size = size >> levels;
-       if (size < 1)
-               size = 1;
-       return size;
-}
-
-
 static void calculate_miptree_layout(radeonContextPtr rmesa, radeon_mipmap_tree *mt)
 {
        GLuint curOffset, i, face, level;
index f6d38fb6480fe0d308855bf66e839c9e3e4177be..b206acacf4a3ce18d50b02dae00ed3aad7e33b3b 100644 (file)
@@ -656,6 +656,12 @@ INTERP_4F(GLfloat t, GLfloat dst[4], const GLfloat out[4], const GLfloat in[4])
 #define MIN3( A, B, C ) ((A) < (B) ? MIN2(A, C) : MIN2(B, C))
 #define MAX3( A, B, C ) ((A) > (B) ? MAX2(A, C) : MAX2(B, C))
 
+static inline unsigned
+minify(unsigned value, unsigned levels)
+{
+    return MAX2(1, value >> levels);
+}
+
 /**
  * Align a value up to an alignment value
  *