intel: Drop texture border support code.
authorEric Anholt <eric@anholt.net>
Mon, 17 Oct 2011 21:53:13 +0000 (14:53 -0700)
committerEric Anholt <eric@anholt.net>
Wed, 26 Oct 2011 19:42:28 +0000 (12:42 -0700)
Now that texture borders are gone, we never need to allocate our
textures through non-miptrees, which simplifies some irritating paths.

v2: Remove the !mt support case from intel_map_texture_image()

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> (v1)
Reviewed-by: Brian Paul <brianp@vmware.com>
src/mesa/drivers/dri/i965/brw_fallback.c
src/mesa/drivers/dri/intel/intel_mipmap_tree.c
src/mesa/drivers/dri/intel/intel_tex.c
src/mesa/drivers/dri/intel/intel_tex_image.c
src/mesa/drivers/dri/intel/intel_tex_validate.c

index ae08cf56f5057d14fdd390064fde43490f16684c..708bd0e9a54d2a12648ab21e235e4b04af788431 100644 (file)
@@ -42,7 +42,6 @@
 static bool do_check_fallback(struct brw_context *brw)
 {
    struct gl_context *ctx = &brw->intel.ctx;
-   GLuint i;
 
    if (brw->intel.no_rast) {
       DBG("FALLBACK: rasterization disabled\n");
@@ -56,20 +55,6 @@ static bool do_check_fallback(struct brw_context *brw)
       return true;
    }
 
-   /* _NEW_TEXTURE:
-    */
-   for (i = 0; i < BRW_MAX_TEX_UNIT; i++) {
-      struct gl_texture_unit *texUnit = &ctx->Texture.Unit[i];
-      if (texUnit->_ReallyEnabled) {
-        struct gl_texture_object *tex_obj = texUnit->_Current;
-        struct gl_texture_image *texImage = tex_obj->Image[0][tex_obj->BaseLevel];
-        if (texImage->Border) {
-           DBG("FALLBACK: texture border\n");
-           return true;
-        }
-      }
-   }
-
    return false;
 }
 
@@ -80,7 +65,7 @@ static void check_fallback(struct brw_context *brw)
 
 const struct brw_tracked_state brw_check_fallback = {
    .dirty = {
-      .mesa = _NEW_RENDERMODE | _NEW_TEXTURE | _NEW_STENCIL,
+      .mesa = _NEW_RENDERMODE | _NEW_STENCIL,
       .brw  = 0,
       .cache = 0
    },
index 54f73e8b47b70e1ed001fd458fc7862ca6b4ce3d..19f151f4fa35e2c092fb1754763c0b532bc2b0d8 100644 (file)
@@ -246,10 +246,6 @@ intel_miptree_match_image(struct intel_mipmap_tree *mt,
    GLuint level = intelImage->base.Base.Level;
    int width, height, depth;
 
-   /* Images with borders are never pulled into mipmap trees. */
-   if (image->Border)
-      return false;
-
    if (image->TexFormat != mt->format)
       return false;
 
index 58066598beb32f8102de136d1724da1e7c3a1502..7af513880916de72cb932d57a2344213690d8a15 100644 (file)
@@ -61,6 +61,8 @@ intel_alloc_texture_image_buffer(struct gl_context *ctx,
    struct intel_texture_object *intel_texobj = intel_texture_object(texobj);
    GLuint slices;
 
+   assert(image->Border == 0);
+
    /* Because the driver uses AllocTextureImageBuffer() internally, it may end
     * up mismatched with FreeTextureImageBuffer(), but that is safe to call
     * multiple times.
@@ -93,8 +95,7 @@ intel_alloc_texture_image_buffer(struct gl_context *ctx,
       DBG("%s: alloc obj %p level %d %dx%dx%d using object's miptree %p\n",
           __FUNCTION__, texobj, image->Level,
           width, height, depth, intel_texobj->mt);
-      return true;
-   } else if (image->Border == 0) {
+   } else {
       intel_image->mt = intel_miptree_create_for_teximage(intel, intel_texobj,
                                                           intel_image,
                                                           false);
@@ -114,14 +115,9 @@ intel_alloc_texture_image_buffer(struct gl_context *ctx,
       DBG("%s: alloc obj %p level %d %dx%dx%d using new miptree %p\n",
           __FUNCTION__, texobj, image->Level,
           width, height, depth, intel_image->mt);
-      return true;
    }
 
-   DBG("%s: alloc obj %p level %d %dx%dx%d using swrast\n",
-       __FUNCTION__, texobj, image->Level, width, height, depth);
-
-   return _swrast_alloc_texture_image_buffer(ctx, image, format,
-                                            width, height, depth);
+   return true;
 }
 
 static void
@@ -168,6 +164,11 @@ intel_map_texture_image(struct gl_context *ctx,
    struct intel_texture_image *intel_image = intel_texture_image(tex_image);
    struct intel_mipmap_tree *mt = intel_image->mt;
    unsigned int bw, bh;
+   void *base;
+   unsigned int image_x, image_y;
+
+   /* Our texture data is always stored in a miptree. */
+   assert(mt);
 
    /* Check that our caller wasn't confused about how to map a 1D texture. */
    assert(tex_image->TexObject->Target != GL_TEXTURE_1D_ARRAY ||
@@ -190,36 +191,18 @@ intel_map_texture_image(struct gl_context *ctx,
    assert(y % bh == 0);
    y /= bh;
 
-   if (likely(mt)) {
-      void *base = intel_region_map(intel, mt->region, mode);
-      unsigned int image_x, image_y;
-
-      intel_miptree_get_image_offset(mt, tex_image->Level, tex_image->Face,
-                                    slice, &image_x, &image_y);
-      x += image_x;
-      y += image_y;
+   base = intel_region_map(intel, mt->region, mode);
+   intel_miptree_get_image_offset(mt, tex_image->Level, tex_image->Face,
+                                 slice, &image_x, &image_y);
+   x += image_x;
+   y += image_y;
 
-      *stride = mt->region->pitch * mt->cpp;
-      *map = base + y * *stride + x * mt->cpp;
+   *stride = mt->region->pitch * mt->cpp;
+   *map = base + y * *stride + x * mt->cpp;
 
-      DBG("%s: %d,%d %dx%d from mt %p %d,%d = %p/%d\n", __FUNCTION__,
-         x - image_x, y - image_y, w, h,
-         mt, x, y, *map, *stride);
-   } else {
-      /* texture data is in malloc'd memory */
-      GLuint width = tex_image->Width;
-      GLuint height = ALIGN(tex_image->Height, bh) / bh;
-      GLuint texelSize = _mesa_get_format_bytes(tex_image->TexFormat);
-
-      assert(map);
-
-      *stride = _mesa_format_row_stride(tex_image->TexFormat, width);
-      *map = intel_image->base.Buffer + (slice * height + y) * *stride + x * texelSize;
-
-      DBG("%s: %d,%d %dx%d from data %p = %p/%d\n", __FUNCTION__,
-         x, y, w, h,
-         intel_image->base.Buffer, *map, *stride);
-   }
+   DBG("%s: %d,%d %dx%d from mt %p %d,%d = %p/%d\n", __FUNCTION__,
+       x - image_x, y - image_y, w, h,
+       mt, x, y, *map, *stride);
 }
 
 static void
@@ -229,8 +212,7 @@ intel_unmap_texture_image(struct gl_context *ctx,
    struct intel_context *intel = intel_context(ctx);
    struct intel_texture_image *intel_image = intel_texture_image(tex_image);
 
-   if (intel_image->mt)
-      intel_region_unmap(intel, intel_image->mt->region);
+   intel_region_unmap(intel, intel_image->mt->region);
 
    if (intel_image->stencil_rb) {
       /*
index d0526843c5eebcb45b57582fa0e4bd10a12fdd78..eaf034abe56912a711c22423ff26ddeaebae7edf 100644 (file)
 
 #define FILE_DEBUG_FLAG DEBUG_TEXTURE
 
-/* Functions to store texture images.  Where possible, mipmap_tree's
- * will be created or further instantiated with image data, otherwise
- * images will be stored in malloc'd memory.  A validation step is
- * required to pull those images into a mipmap tree, or otherwise
- * decide a fallback is required.
- */
-
-
-
-/* Otherwise, store it in memory if (Border != 0) or (any dimension ==
- * 1).
- *    
- * Otherwise, if max_level >= level >= min_level, create tree with
- * space for textures from min_level down to max_level.
- *
- * Otherwise, create tree with space for textures from (level
- * 0)..(1x1).  Consider pruning this tree at a validation if the
- * saving is worth it.
+/* Work back from the specified level of the image to the baselevel and create a
+ * miptree of that size.
  */
 struct intel_mipmap_tree *
 intel_miptree_create_for_teximage(struct intel_context *intel,
@@ -61,9 +45,6 @@ intel_miptree_create_for_teximage(struct intel_context *intel,
 
    DBG("%s\n", __FUNCTION__);
 
-   if (intelImage->base.Base.Border)
-      return NULL;
-
    if (intelImage->base.Base.Level > intelObj->base.BaseLevel &&
        (width == 1 ||
         (intelObj->base.Target != GL_TEXTURE_1D && height == 1) ||
@@ -350,14 +331,13 @@ intelTexImage(struct gl_context * ctx,
               GLenum target, GLint level,
               GLint internalFormat,
               GLint width, GLint height, GLint depth,
-              GLint border,
               GLenum format, GLenum type, const void *pixels,
               const struct gl_pixelstore_attrib *unpack,
               struct gl_texture_object *texObj,
               struct gl_texture_image *texImage, GLsizei imageSize)
 {
-   DBG("%s target %s level %d %dx%dx%d border %d\n", __FUNCTION__,
-       _mesa_lookup_enum_by_nr(target), level, width, height, depth, border);
+   DBG("%s target %s level %d %dx%dx%d\n", __FUNCTION__,
+       _mesa_lookup_enum_by_nr(target), level, width, height, depth);
 
    /* Attempt to use the blitter for PBO image uploads.
     */
@@ -371,7 +351,7 @@ intelTexImage(struct gl_context * ctx,
        __FUNCTION__, width, height, depth, pixels);
 
    _mesa_store_teximage3d(ctx, target, level, internalFormat,
-                         width, height, depth, border,
+                         width, height, depth, 0,
                          format, type, pixels,
                          unpack, texObj, texImage);
 }
@@ -389,7 +369,7 @@ intelTexImage3D(struct gl_context * ctx,
                 struct gl_texture_image *texImage)
 {
    intelTexImage(ctx, 3, target, level,
-                 internalFormat, width, height, depth, border,
+                 internalFormat, width, height, depth,
                  format, type, pixels, unpack, texObj, texImage, 0);
 }
 
@@ -405,7 +385,7 @@ intelTexImage2D(struct gl_context * ctx,
                 struct gl_texture_image *texImage)
 {
    intelTexImage(ctx, 2, target, level,
-                 internalFormat, width, height, 1, border,
+                 internalFormat, width, height, 1,
                  format, type, pixels, unpack, texObj, texImage, 0);
 }
 
@@ -421,7 +401,7 @@ intelTexImage1D(struct gl_context * ctx,
                 struct gl_texture_image *texImage)
 {
    intelTexImage(ctx, 1, target, level,
-                 internalFormat, width, 1, 1, border,
+                 internalFormat, width, 1, 1,
                  format, type, pixels, unpack, texObj, texImage, 0);
 }
 
index 6639de9c2af73875f6375f7cb5f013382483579d..a657732027ae7dc762fa2aed651190736b799a95 100644 (file)
@@ -52,13 +52,6 @@ intel_finalize_mipmap_tree(struct intel_context *intel, GLuint unit)
    intel_update_max_level(intelObj, sampler);
    firstImage = intel_texture_image(tObj->Image[0][tObj->BaseLevel]);
 
-   /* Fallback case:
-    */
-   if (firstImage->base.Base.Border) {
-      intel_miptree_release(&intelObj->mt);
-      return false;
-   }
-
    intel_miptree_get_dimensions_for_image(&firstImage->base.Base,
                                           &width, &height, &depth);