Module: Mesa
Branch: main
Commit: 6da2fb81a75026d690d856da090cf078fad80ae1
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6da2fb81a75026d690d856da090cf078fad80ae1

Author: Marek Olšák <[email protected]>
Date:   Sun Jul 24 19:35:28 2022 -0400

Revert "mesa: implement a display list / glBitmap texture atlas"

This reverts commit b26ddda12fe7dbb6a4e6af3b47c1e837cc7ebb03 and
commit 06d3b0a006f35dc232d512d09f45a6cb4f13cfdf.

Reviewed-by: Brian Paul <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17780>

---

 src/mesa/main/dd.h                    |   1 -
 src/mesa/main/dlist.c                 | 392 ----------------------------------
 src/mesa/main/dlist.h                 |  38 ----
 src/mesa/main/mtypes.h                |   1 -
 src/mesa/main/shared.c                |  18 --
 src/mesa/state_tracker/st_cb_bitmap.c | 148 +------------
 src/mesa/state_tracker/st_cb_bitmap.h |   5 +-
 src/mesa/state_tracker/st_context.h   |   1 -
 8 files changed, 4 insertions(+), 600 deletions(-)

diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 0615942212a..a9c714f0876 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -44,7 +44,6 @@
 #undef MemoryBarrier
 #endif
 
-struct gl_bitmap_atlas;
 struct gl_buffer_object;
 struct gl_context;
 struct gl_display_list;
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index 64070b68d0d..c4cddad4776 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -55,8 +55,6 @@
 #include "state_tracker/st_cb_texture.h"
 #include "state_tracker/st_cb_bitmap.h"
 
-#define USE_BITMAP_ATLAS 1
-
 static bool
 _mesa_glthread_should_execute_list(struct gl_context *ctx,
                                    struct gl_display_list *dlist);
@@ -802,271 +800,6 @@ Node *get_list_head(struct gl_context *ctx, struct 
gl_display_list *dlist)
 }
 
 
-/**
- * Does the given display list only contain a single glBitmap call?
- */
-static bool
-is_bitmap_list(struct gl_context *ctx, struct gl_display_list *dlist)
-{
-   Node *n = get_list_head(ctx, dlist);
-   if (n[0].opcode == OPCODE_BITMAP) {
-      n += n[0].InstSize;
-      if (n[0].opcode == OPCODE_END_OF_LIST)
-         return true;
-   }
-   return false;
-}
-
-
-/**
- * Is the given display list an empty list?
- */
-static bool
-is_empty_list(struct gl_context *ctx, struct gl_display_list *dlist)
-{
-   Node *n = get_list_head(ctx, dlist);
-   return n[0].opcode == OPCODE_END_OF_LIST;
-}
-
-
-/**
- * Delete/free a gl_bitmap_atlas.  Called during context tear-down.
- */
-void
-_mesa_delete_bitmap_atlas(struct gl_context *ctx, struct gl_bitmap_atlas 
*atlas)
-{
-   if (atlas->texObj) {
-      _mesa_delete_texture_object(ctx, atlas->texObj);
-   }
-   free(atlas->glyphs);
-   free(atlas);
-}
-
-
-/**
- * Lookup a gl_bitmap_atlas by listBase ID.
- */
-static struct gl_bitmap_atlas *
-lookup_bitmap_atlas(struct gl_context *ctx, GLuint listBase)
-{
-   struct gl_bitmap_atlas *atlas;
-
-   assert(listBase > 0);
-   atlas = _mesa_HashLookup(ctx->Shared->BitmapAtlas, listBase);
-   return atlas;
-}
-
-
-/**
- * Create new bitmap atlas and insert into hash table.
- */
-static struct gl_bitmap_atlas *
-alloc_bitmap_atlas(struct gl_context *ctx, GLuint listBase, bool isGenName)
-{
-   struct gl_bitmap_atlas *atlas;
-
-   assert(listBase > 0);
-   assert(_mesa_HashLookup(ctx->Shared->BitmapAtlas, listBase) == NULL);
-
-   atlas = calloc(1, sizeof(*atlas));
-   if (atlas) {
-      _mesa_HashInsert(ctx->Shared->BitmapAtlas, listBase, atlas, isGenName);
-      atlas->Id = listBase;
-   }
-
-   return atlas;
-}
-
-
-/**
- * Try to build a bitmap atlas.  This involves examining a sequence of
- * display lists which contain glBitmap commands and putting the bitmap
- * images into a texture map (the atlas).
- * If we succeed, gl_bitmap_atlas::complete will be set to true.
- * If we fail, gl_bitmap_atlas::incomplete will be set to true.
- */
-static void
-build_bitmap_atlas(struct gl_context *ctx, struct gl_bitmap_atlas *atlas,
-                   GLuint listBase)
-{
-   unsigned i, row_height = 0, xpos = 0, ypos = 0;
-   GLubyte *map;
-   GLint map_stride;
-
-   assert(atlas);
-   assert(!atlas->complete);
-   assert(atlas->numBitmaps > 0);
-
-   /* We use a rectangle texture (non-normalized coords) for the atlas */
-   assert(ctx->Extensions.NV_texture_rectangle);
-   assert(ctx->Const.MaxTextureRectSize >= 1024);
-
-   atlas->texWidth = 1024;
-   atlas->texHeight = 0;  /* determined below */
-
-   atlas->glyphs = malloc(atlas->numBitmaps * sizeof(atlas->glyphs[0]));
-   if (!atlas->glyphs) {
-      /* give up */
-      atlas->incomplete = true;
-      return;
-   }
-
-   /* Loop over the display lists.  They should all contain a single glBitmap
-    * call.  If not, bail out.  Also, compute the position and sizes of each
-    * bitmap in the atlas to determine the texture atlas size.
-    */
-   for (i = 0; i < atlas->numBitmaps; i++) {
-      struct gl_display_list *list = _mesa_lookup_list(ctx, listBase + i, 
true);
-      const Node *n;
-      struct gl_bitmap_glyph *g = &atlas->glyphs[i];
-      unsigned bitmap_width, bitmap_height;
-      float bitmap_xmove, bitmap_ymove, bitmap_xorig, bitmap_yorig;
-
-      if (!list || is_empty_list(ctx, list)) {
-         /* stop here */
-         atlas->numBitmaps = i;
-         break;
-      }
-
-      if (!is_bitmap_list(ctx, list)) {
-         /* This list does not contain exactly one glBitmap command. Give up. 
*/
-         atlas->incomplete = true;
-         return;
-      }
-
-      /* get bitmap info from the display list command */
-      n = get_list_head(ctx, list);
-      assert(n[0].opcode == OPCODE_BITMAP);
-      bitmap_width = n[1].i;
-      bitmap_height = n[2].i;
-      bitmap_xorig = n[3].f;
-      bitmap_yorig = n[4].f;
-      bitmap_xmove = n[5].f;
-      bitmap_ymove = n[6].f;
-
-      if (xpos + bitmap_width > atlas->texWidth) {
-         /* advance to the next row of the texture */
-         xpos = 0;
-         ypos += row_height;
-         row_height = 0;
-      }
-
-      /* save the bitmap's position in the atlas */
-      g->x = xpos;
-      g->y = ypos;
-      g->w = bitmap_width;
-      g->h = bitmap_height;
-      g->xorig = bitmap_xorig;
-      g->yorig = bitmap_yorig;
-      g->xmove = bitmap_xmove;
-      g->ymove = bitmap_ymove;
-
-      xpos += bitmap_width;
-
-      /* keep track of tallest bitmap in the row */
-      row_height = MAX2(row_height, bitmap_height);
-   }
-
-   /* Now we know the texture height */
-   atlas->texHeight = ypos + row_height;
-
-   if (atlas->texHeight == 0) {
-      /* no glyphs found, give up */
-      goto fail;
-   }
-   else if (atlas->texHeight > ctx->Const.MaxTextureRectSize) {
-      /* too large, give up */
-      goto fail;
-   }
-
-   /* Create atlas texture (texture ID is irrelevant) */
-   atlas->texObj = _mesa_new_texture_object(ctx, 999, GL_TEXTURE_RECTANGLE);
-   if (!atlas->texObj) {
-      goto out_of_memory;
-   }
-
-   atlas->texObj->Sampler.Attrib.MinFilter = GL_NEAREST;
-   atlas->texObj->Sampler.Attrib.MagFilter = GL_NEAREST;
-   atlas->texObj->Sampler.Attrib.state.min_img_filter = 
PIPE_TEX_FILTER_NEAREST;
-   atlas->texObj->Sampler.Attrib.state.min_mip_filter = 
PIPE_TEX_MIPFILTER_NONE;
-   atlas->texObj->Sampler.Attrib.state.mag_img_filter = 
PIPE_TEX_FILTER_NEAREST;
-   atlas->texObj->Attrib.MaxLevel = 0;
-   atlas->texObj->Immutable = GL_TRUE;
-
-   atlas->texImage = _mesa_get_tex_image(ctx, atlas->texObj,
-                                         GL_TEXTURE_RECTANGLE, 0);
-   if (!atlas->texImage) {
-      goto out_of_memory;
-   }
-
-   if (ctx->Const.BitmapUsesRed)
-      _mesa_init_teximage_fields(ctx, atlas->texImage,
-                                 atlas->texWidth, atlas->texHeight, 1, 0,
-                                 GL_RED, MESA_FORMAT_R_UNORM8);
-   else
-      _mesa_init_teximage_fields(ctx, atlas->texImage,
-                                 atlas->texWidth, atlas->texHeight, 1, 0,
-                                 GL_ALPHA, MESA_FORMAT_A_UNORM8);
-
-   /* alloc image storage */
-   if (!st_AllocTextureImageBuffer(ctx, atlas->texImage)) {
-      goto out_of_memory;
-   }
-
-   /* map teximage, load with bitmap glyphs */
-   st_MapTextureImage(ctx, atlas->texImage, 0,
-                      0, 0, atlas->texWidth, atlas->texHeight,
-                      GL_MAP_WRITE_BIT, &map, &map_stride);
-   if (!map) {
-      goto out_of_memory;
-   }
-
-   /* Background/clear pixels are 0xff, foreground/set pixels are 0x0 */
-   memset(map, 0xff, map_stride * atlas->texHeight);
-
-   for (i = 0; i < atlas->numBitmaps; i++) {
-      struct gl_display_list *list = _mesa_lookup_list(ctx, listBase + i, 
true);
-      const Node *n = get_list_head(ctx, list);
-
-      assert(n[0].opcode == OPCODE_BITMAP ||
-             n[0].opcode == OPCODE_END_OF_LIST);
-
-      if (n[0].opcode == OPCODE_BITMAP) {
-         unsigned bitmap_width = n[1].i;
-         unsigned bitmap_height = n[2].i;
-         unsigned xpos = atlas->glyphs[i].x;
-         unsigned ypos = atlas->glyphs[i].y;
-         const void *bitmap_image = get_pointer(&n[7]);
-
-         assert(atlas->glyphs[i].w == bitmap_width);
-         assert(atlas->glyphs[i].h == bitmap_height);
-
-         /* put the bitmap image into the texture image */
-         _mesa_expand_bitmap(bitmap_width, bitmap_height,
-                             &ctx->DefaultPacking, bitmap_image,
-                             map + map_stride * ypos + xpos, /* dest addr */
-                             map_stride, 0x0);
-      }
-   }
-
-   st_UnmapTextureImage(ctx, atlas->texImage, 0);
-
-   atlas->complete = true;
-
-   return;
-
-out_of_memory:
-   _mesa_error(ctx, GL_OUT_OF_MEMORY, "Display list bitmap atlas");
-fail:
-   if (atlas->texObj) {
-      _mesa_delete_texture_object(ctx, atlas->texObj);
-   }
-   free(atlas->glyphs);
-   atlas->glyphs = NULL;
-   atlas->incomplete = true;
-}
-
-
 /**
  * Allocate a gl_display_list object with an initial block of storage.
  * \param count  how many display list nodes/tokens to allocate
@@ -1354,31 +1087,6 @@ _mesa_delete_list(struct gl_context *ctx, struct 
gl_display_list *dlist)
 }
 
 
-/**
- * Called by _mesa_HashWalk() to check if a display list which is being
- * deleted belongs to a bitmap texture atlas.
- */
-static void
-check_atlas_for_deleted_list(void *data, void *userData)
-{
-   struct gl_bitmap_atlas *atlas = (struct gl_bitmap_atlas *) data;
-   GLuint list_id = *((GLuint *) userData);  /* the list being deleted */
-   const GLuint atlas_id = atlas->Id;
-
-   /* See if the list_id falls in the range contained in this texture atlas */
-   if (atlas->complete &&
-       list_id >= atlas_id &&
-       list_id < atlas_id + atlas->numBitmaps) {
-      /* Mark the atlas as incomplete so it doesn't get used.  But don't
-       * delete it yet since we don't want to try to recreate it in the next
-       * glCallLists.
-       */
-      atlas->complete = false;
-      atlas->incomplete = true;
-   }
-}
-
-
 /**
  * Destroy a display list and remove from hash table.
  * \param list - display list number
@@ -1395,16 +1103,6 @@ destroy_list(struct gl_context *ctx, GLuint list)
    if (!dlist)
       return;
 
-   if (is_bitmap_list(ctx, dlist)) {
-      /* If we're destroying a simple glBitmap display list, there's a
-       * chance that we're destroying a bitmap image that's in a texture
-       * atlas.  Examine all atlases to see if that's the case.  There's
-       * usually few (if any) atlases so this isn't expensive.
-       */
-      _mesa_HashWalk(ctx->Shared->BitmapAtlas,
-                     check_atlas_for_deleted_list, &list);
-   }
-
    _mesa_delete_list(ctx, dlist);
    _mesa_HashRemoveLocked(ctx->Shared->DisplayList, list);
 }
@@ -13388,17 +13086,6 @@ _mesa_DeleteLists(GLuint list, GLsizei range)
       return;
    }
 
-   if (range > 1) {
-      /* We may be deleting a set of bitmap lists.  See if there's a
-       * bitmap atlas to free.
-       */
-      struct gl_bitmap_atlas *atlas = lookup_bitmap_atlas(ctx, list);
-      if (atlas) {
-         _mesa_delete_bitmap_atlas(ctx, atlas);
-         _mesa_HashRemove(ctx->Shared->BitmapAtlas, list);
-      }
-   }
-
    _mesa_HashLockMutex(ctx->Shared->DisplayList);
    for (i = list; i < list + range; i++) {
       destroy_list(ctx, i);
@@ -13442,23 +13129,6 @@ _mesa_GenLists(GLsizei range)
       }
    }
 
-   if (USE_BITMAP_ATLAS &&
-       range > 16) {
-      /* "range > 16" is a rough heuristic to guess when glGenLists might be
-       * used to allocate display lists for glXUseXFont or wglUseFontBitmaps.
-       * Create the empty atlas now.
-       */
-      struct gl_bitmap_atlas *atlas = lookup_bitmap_atlas(ctx, base);
-      if (!atlas) {
-         atlas = alloc_bitmap_atlas(ctx, base, true);
-      }
-      if (atlas) {
-         /* Atlas _should_ be new/empty now, but clobbering is OK */
-         assert(atlas->numBitmaps == 0);
-         atlas->numBitmaps = range;
-      }
-   }
-
    _mesa_HashUnlockMutex(ctx->Shared->DisplayList);
 
    return base;
@@ -13774,64 +13444,6 @@ _mesa_CallList(GLuint list)
 }
 
 
-/**
- * Try to execute a glCallLists() command where the display lists contain
- * glBitmap commands with a texture atlas.
- * \return true for success, false otherwise
- */
-static bool
-render_bitmap_atlas(struct gl_context *ctx, GLsizei n, GLenum type,
-                    const void *lists)
-{
-   struct gl_bitmap_atlas *atlas;
-   int i;
-
-   if (!USE_BITMAP_ATLAS ||
-       !ctx->Current.RasterPosValid ||
-       ctx->List.ListBase == 0 ||
-       type != GL_UNSIGNED_BYTE) {
-      /* unsupported */
-      return false;
-   }
-
-   atlas = lookup_bitmap_atlas(ctx, ctx->List.ListBase);
-
-   if (!atlas) {
-      /* Even if glGenLists wasn't called, we can still try to create
-       * the atlas now.
-       */
-      atlas = alloc_bitmap_atlas(ctx, ctx->List.ListBase, false);
-   }
-
-   if (atlas && !atlas->complete && !atlas->incomplete) {
-      /* Try to build the bitmap atlas now.
-       * If the atlas was created in glGenLists, we'll have recorded the
-       * number of lists (bitmaps).  Otherwise, take a guess at 256.
-       */
-      if (atlas->numBitmaps == 0)
-         atlas->numBitmaps = 256;
-      build_bitmap_atlas(ctx, atlas, ctx->List.ListBase);
-   }
-
-   if (!atlas || !atlas->complete) {
-      return false;
-   }
-
-   /* check that all display list IDs are in the atlas */
-   for (i = 0; i < n; i++) {
-      const GLubyte *ids = (const GLubyte *) lists;
-
-      if (ids[i] >= atlas->numBitmaps) {
-         return false;
-      }
-   }
-
-   st_DrawAtlasBitmaps(ctx, atlas, n, (const GLubyte *) lists);
-
-   return true;
-}
-
-
 /**
  * Execute glCallLists:  call multiple display lists.
  */
@@ -13857,10 +13469,6 @@ _mesa_CallLists(GLsizei n, GLenum type, const GLvoid * 
lists)
       return;
    }
 
-   if (render_bitmap_atlas(ctx, n, type, lists)) {
-      return;
-   }
-
    /* Save the CompileFlag status, turn it off, execute the display lists,
     * and restore the CompileFlag. This is needed for GL_COMPILE_AND_EXECUTE
     * because the call is already recorded and we just need to execute it.
diff --git a/src/mesa/main/dlist.h b/src/mesa/main/dlist.h
index ac9f8048c1c..98de831030f 100644
--- a/src/mesa/main/dlist.h
+++ b/src/mesa/main/dlist.h
@@ -69,44 +69,6 @@ union gl_dlist_node
    GLsizei si;
 };
 
-/**
- * Describes the location and size of a glBitmap image in a texture atlas.
- */
-struct gl_bitmap_glyph
-{
-   unsigned short x, y, w, h;  /**< position and size in the texture */
-   float xorig, yorig;         /**< bitmap origin */
-   float xmove, ymove;         /**< rasterpos move */
-};
-
-
-/**
- * Describes a set of glBitmap display lists which live in a texture atlas.
- * The idea is when we see a code sequence of glListBase(b), glCallLists(n)
- * we're probably drawing bitmap font glyphs.  We try to put all the bitmap
- * glyphs into one texture map then render the glCallLists as a textured
- * quadstrip.
- */
-struct gl_bitmap_atlas
-{
-   GLint Id;
-   bool complete;     /**< Is the atlas ready to use? */
-   bool incomplete;   /**< Did we fail to construct this atlas? */
-
-   unsigned numBitmaps;
-   unsigned texWidth, texHeight;
-   struct gl_texture_object *texObj;
-   struct gl_texture_image *texImage;
-
-   unsigned glyphHeight;
-
-   struct gl_bitmap_glyph *glyphs;
-};
-
-void
-_mesa_delete_bitmap_atlas(struct gl_context *ctx,
-                          struct gl_bitmap_atlas *atlas);
-
 struct gl_display_list *
 _mesa_lookup_list(struct gl_context *ctx, GLuint list, bool locked);
 
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 1c725f01008..6d5ca9a4411 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -2433,7 +2433,6 @@ struct gl_shared_state
    bool DisplayListsAffectGLThread;
 
    struct _mesa_HashTable *DisplayList;           /**< Display lists hash 
table */
-   struct _mesa_HashTable *BitmapAtlas;    /**< For optimized glBitmap text */
    struct _mesa_HashTable *TexObjects;    /**< Texture objects hash table */
 
    /** Default texture objects (shared by all texture units) */
diff --git a/src/mesa/main/shared.c b/src/mesa/main/shared.c
index 2085b280e00..b62c01c1ee1 100644
--- a/src/mesa/main/shared.c
+++ b/src/mesa/main/shared.c
@@ -72,7 +72,6 @@ _mesa_alloc_shared_state(struct gl_context *ctx)
    simple_mtx_init(&shared->Mutex, mtx_plain);
 
    shared->DisplayList = _mesa_NewHashTable();
-   shared->BitmapAtlas = _mesa_NewHashTable();
    shared->TexObjects = _mesa_NewHashTable();
    shared->Programs = _mesa_NewHashTable();
 
@@ -158,18 +157,6 @@ delete_displaylist_cb(void *data, void *userData)
 }
 
 
-/**
- * Callback for deleting a bitmap atlas.  Called by _mesa_HashDeleteAll().
- */
-static void
-delete_bitmap_atlas_cb(void *data, void *userData)
-{
-   struct gl_bitmap_atlas *atlas = (struct gl_bitmap_atlas *) data;
-   struct gl_context *ctx = (struct gl_context *) userData;
-   _mesa_delete_bitmap_atlas(ctx, atlas);
-}
-
-
 /**
  * Callback for deleting a texture object.  Called by _mesa_HashDeleteAll().
  */
@@ -362,11 +349,6 @@ free_shared_state(struct gl_context *ctx, struct 
gl_shared_state *shared)
       util_idalloc_fini(&shared->small_dlist_store.free_idx);
    }
 
-   if (shared->BitmapAtlas) {
-      _mesa_HashDeleteAll(shared->BitmapAtlas, delete_bitmap_atlas_cb, ctx);
-      _mesa_DeleteHashTable(shared->BitmapAtlas);
-   }
-
    if (shared->ShaderObjects) {
       _mesa_HashWalk(shared->ShaderObjects, free_shader_program_data_cb, ctx);
       _mesa_HashDeleteAll(shared->ShaderObjects, delete_shader_cb, ctx);
diff --git a/src/mesa/state_tracker/st_cb_bitmap.c 
b/src/mesa/state_tracker/st_cb_bitmap.c
index e2f944765ed..48c28eab00c 100644
--- a/src/mesa/state_tracker/st_cb_bitmap.c
+++ b/src/mesa/state_tracker/st_cb_bitmap.c
@@ -34,7 +34,6 @@
 
 #include "main/image.h"
 #include "main/bufferobj.h"
-#include "main/dlist.h"
 #include "main/framebuffer.h"
 #include "main/macros.h"
 #include "main/pbo.h"
@@ -56,7 +55,6 @@
 #include "pipe/p_defines.h"
 #include "pipe/p_shader_tokens.h"
 #include "util/u_inlines.h"
-#include "util/u_upload_mgr.h"
 #include "program/prog_instruction.h"
 #include "cso_cache/cso_context.h"
 
@@ -167,8 +165,7 @@ make_bitmap_texture(struct gl_context *ctx, GLsizei width, 
GLsizei height,
 static void
 setup_render_state(struct gl_context *ctx,
                    struct pipe_sampler_view *sv,
-                   const GLfloat *color,
-                   bool atlas)
+                   const GLfloat *color)
 {
    struct st_context *st = st_context(ctx);
    struct pipe_context *pipe = st->pipe;
@@ -232,10 +229,7 @@ setup_render_state(struct gl_context *ctx,
       for (i = 0; i < st->state.num_frag_samplers; i++) {
          samplers[i] = &st->state.frag_samplers[i];
       }
-      if (atlas)
-         samplers[fpv->bitmap_sampler] = &st->bitmap.atlas_sampler;
-      else
-         samplers[fpv->bitmap_sampler] = &st->bitmap.sampler;
+      samplers[fpv->bitmap_sampler] = &st->bitmap.sampler;
       cso_set_samplers(cso, PIPE_SHADER_FRAGMENT, num,
                        (const struct pipe_sampler_state **) samplers);
    }
@@ -321,7 +315,7 @@ draw_bitmap_quad(struct gl_context *ctx, GLint x, GLint y, 
GLfloat z,
       assert(height <= (GLsizei) maxSize);
    }
 
-   setup_render_state(ctx, sv, color, false);
+   setup_render_state(ctx, sv, color);
 
    /* convert Z from [0,1] to [-1,-1] to match viewport Z scale/bias */
    z = z * 2.0f - 1.0f;
@@ -563,9 +557,6 @@ init_bitmap_state(struct st_context *st)
    st->bitmap.sampler.mag_img_filter = PIPE_TEX_FILTER_NEAREST;
    st->bitmap.sampler.normalized_coords = st->internal_target == 
PIPE_TEXTURE_2D;
 
-   st->bitmap.atlas_sampler = st->bitmap.sampler;
-   st->bitmap.atlas_sampler.normalized_coords = 0;
-
    /* init baseline rasterizer state once */
    memset(&st->bitmap.rasterizer, 0, sizeof(st->bitmap.rasterizer));
    st->bitmap.rasterizer.half_pixel_center = 1;
@@ -642,139 +633,6 @@ st_Bitmap(struct gl_context *ctx, GLint x, GLint y,
    }
 }
 
-void
-st_DrawAtlasBitmaps(struct gl_context *ctx,
-                    const struct gl_bitmap_atlas *atlas,
-                    GLuint count, const GLubyte *ids)
-{
-   struct st_context *st = st_context(ctx);
-   struct pipe_context *pipe = st->pipe;
-   struct gl_texture_object *stObj = atlas->texObj;
-   struct pipe_sampler_view *sv;
-   /* convert Z from [0,1] to [-1,-1] to match viewport Z scale/bias */
-   const float z = ctx->Current.RasterPos[2] * 2.0f - 1.0f;
-   const float *color = ctx->Current.RasterColor;
-   const float clip_x_scale = 2.0f / st->state.fb_width;
-   const float clip_y_scale = 2.0f / st->state.fb_height;
-   const unsigned num_verts = count * 4;
-   const unsigned num_vert_bytes = num_verts * sizeof(struct st_util_vertex);
-   struct st_util_vertex *verts;
-   struct pipe_vertex_buffer vb = {0};
-   unsigned i;
-
-   if (!st->bitmap.tex_format) {
-      init_bitmap_state(st);
-   }
-
-   st_flush_bitmap_cache(st);
-
-   st_validate_state(st, ST_PIPELINE_META);
-   st_invalidate_readpix_cache(st);
-
-   sv = st_create_texture_sampler_view(pipe, stObj->pt);
-   if (!sv) {
-      _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCallLists(bitmap text)");
-      return;
-   }
-
-   setup_render_state(ctx, sv, color, true);
-
-   vb.stride = sizeof(struct st_util_vertex);
-
-   u_upload_alloc(pipe->stream_uploader, 0, num_vert_bytes, 4,
-                  &vb.buffer_offset, &vb.buffer.resource, (void **) &verts);
-
-   if (unlikely(!verts)) {
-      _mesa_error(ctx, GL_OUT_OF_MEMORY, "glCallLists(bitmap text)");
-      goto out;
-   }
-
-   /* build quads vertex data */
-   for (i = 0; i < count; i++) {
-      const GLfloat epsilon = 0.0001F;
-      const struct gl_bitmap_glyph *g = &atlas->glyphs[ids[i]];
-      const float xmove = g->xmove, ymove = g->ymove;
-      const float xorig = g->xorig, yorig = g->yorig;
-      const float s0 = g->x, t0 = g->y;
-      const float s1 = s0 + g->w, t1 = t0 + g->h;
-      const float x0 = util_ifloor(ctx->Current.RasterPos[0] - xorig + 
epsilon);
-      const float y0 = util_ifloor(ctx->Current.RasterPos[1] - yorig + 
epsilon);
-      const float x1 = x0 + g->w, y1 = y0 + g->h;
-      const float clip_x0 = x0 * clip_x_scale - 1.0f;
-      const float clip_y0 = y0 * clip_y_scale - 1.0f;
-      const float clip_x1 = x1 * clip_x_scale - 1.0f;
-      const float clip_y1 = y1 * clip_y_scale - 1.0f;
-
-      /* lower-left corner */
-      verts->x = clip_x0;
-      verts->y = clip_y0;
-      verts->z = z;
-      verts->r = color[0];
-      verts->g = color[1];
-      verts->b = color[2];
-      verts->a = color[3];
-      verts->s = s0;
-      verts->t = t0;
-      verts++;
-
-      /* lower-right corner */
-      verts->x = clip_x1;
-      verts->y = clip_y0;
-      verts->z = z;
-      verts->r = color[0];
-      verts->g = color[1];
-      verts->b = color[2];
-      verts->a = color[3];
-      verts->s = s1;
-      verts->t = t0;
-      verts++;
-
-      /* upper-right corner */
-      verts->x = clip_x1;
-      verts->y = clip_y1;
-      verts->z = z;
-      verts->r = color[0];
-      verts->g = color[1];
-      verts->b = color[2];
-      verts->a = color[3];
-      verts->s = s1;
-      verts->t = t1;
-      verts++;
-
-      /* upper-left corner */
-      verts->x = clip_x0;
-      verts->y = clip_y1;
-      verts->z = z;
-      verts->r = color[0];
-      verts->g = color[1];
-      verts->b = color[2];
-      verts->a = color[3];
-      verts->s = s0;
-      verts->t = t1;
-      verts++;
-
-      /* Update the raster position */
-      ctx->Current.RasterPos[0] += xmove;
-      ctx->Current.RasterPos[1] += ymove;
-      ctx->PopAttribState |= GL_CURRENT_BIT;
-   }
-
-   u_upload_unmap(pipe->stream_uploader);
-
-   cso_set_vertex_buffers(st->cso_context, 0, 1, 0, false, &vb);
-   st->last_num_vbuffers = MAX2(st->last_num_vbuffers, 1);
-
-   cso_draw_arrays(st->cso_context, PIPE_PRIM_QUADS, 0, num_verts);
-
-out:
-   restore_render_state(ctx);
-
-   pipe_resource_reference(&vb.buffer.resource, NULL);
-
-   /* We uploaded modified constants, need to invalidate them. */
-   st->dirty |= ST_NEW_FS_CONSTANTS;
-}
-
 /** Per-context tear-down */
 void
 st_destroy_bitmap(struct st_context *st)
diff --git a/src/mesa/state_tracker/st_cb_bitmap.h 
b/src/mesa/state_tracker/st_cb_bitmap.h
index 0cc453031d5..8a75886d806 100644
--- a/src/mesa/state_tracker/st_cb_bitmap.h
+++ b/src/mesa/state_tracker/st_cb_bitmap.h
@@ -36,7 +36,6 @@ struct dd_function_table;
 struct st_context;
 struct gl_program;
 struct st_program;
-struct gl_bitmap_atlas;
 struct gl_context;
 struct gl_pixelstore_attrib;
 
@@ -49,7 +48,5 @@ st_flush_bitmap_cache(struct st_context *st);
 void st_Bitmap(struct gl_context *ctx, GLint x, GLint y,
                GLsizei width, GLsizei height,
                const struct gl_pixelstore_attrib *unpack, const GLubyte 
*bitmap);
-void st_DrawAtlasBitmaps(struct gl_context *ctx,
-                         const struct gl_bitmap_atlas *atlas,
-                         GLuint count, const GLubyte *ids);
+
 #endif /* ST_CB_BITMAP_H */
diff --git a/src/mesa/state_tracker/st_context.h 
b/src/mesa/state_tracker/st_context.h
index 005d18988ce..cf3445d8e7c 100644
--- a/src/mesa/state_tracker/st_context.h
+++ b/src/mesa/state_tracker/st_context.h
@@ -280,7 +280,6 @@ struct st_context
    struct {
       struct pipe_rasterizer_state rasterizer;
       struct pipe_sampler_state sampler;
-      struct pipe_sampler_state atlas_sampler;
       enum pipe_format tex_format;
       struct st_bitmap_cache cache;
    } bitmap;

Reply via email to