llvmpipe: more bin functions for create/destroy/queries
authorBrian Paul <brianp@vmware.com>
Wed, 9 Dec 2009 19:22:12 +0000 (12:22 -0700)
committerBrian Paul <brianp@vmware.com>
Wed, 9 Dec 2009 19:22:12 +0000 (12:22 -0700)
src/gallium/drivers/llvmpipe/lp_bin.c
src/gallium/drivers/llvmpipe/lp_bin.h

index 3e294e57994d6711d5f4aad701169c6d803b4f15..f2d3c2df4d2ee5a2c68fc4c4cdd884c028079385 100644 (file)
 #include "lp_bin.h"
 
 
+struct lp_bins *
+lp_bins_create(void)
+{
+   struct lp_bins *bins = CALLOC_STRUCT(lp_bins);
+   if (bins)
+      lp_init_bins(bins);
+   return bins;
+}
+
+
+void
+lp_bins_destroy(struct lp_bins *bins)
+{
+   lp_reset_bins(bins);
+   lp_free_bin_data(bins);
+   FREE(bins);
+}
+
+
 void
 lp_init_bins(struct lp_bins *bins)
 {
@@ -147,6 +166,34 @@ lp_bin_new_data_block( struct data_block_list *list )
 }
 
 
+/** Return number of bytes used for bin data */
+unsigned
+lp_bin_data_size( const struct lp_bins *bins )
+{
+   unsigned size = 0;
+   const struct data_block *block;
+   for (block = bins->data.head; block; block = block->next) {
+      size += block->used;
+   }
+   return size;
+}
+
+
+/** Return number of bytes used for a tile bin */
+unsigned
+lp_bin_cmd_size( const struct lp_bins *bins, unsigned x, unsigned y )
+{
+   struct cmd_bin *bin = lp_get_bin((struct lp_bins *) bins, x, y);
+   const struct cmd_block *cmd;
+   unsigned size = 0;
+   for (cmd = bin->commands.head; cmd; cmd = cmd->next) {
+      size += (cmd->count *
+               (sizeof(lp_rast_cmd) + sizeof(union lp_rast_cmd_arg)));
+   }
+   return size;
+}
+
+
 /**
  * Return last command in the bin
  */
index b07ff64e6238c6edb87759c84a52dd7bcdfd2286..c49b0264d611881afb420be1a654062a0cf53ba4 100644 (file)
@@ -120,6 +120,11 @@ struct lp_bins {
 
 
 
+struct lp_bins *lp_bins_create(void);
+
+void lp_bins_destroy(struct lp_bins *bins);
+
+
 void lp_init_bins(struct lp_bins *bins);
 
 void lp_reset_bins(struct lp_bins *bins );
@@ -134,6 +139,10 @@ void lp_bin_new_data_block( struct data_block_list *list );
 
 void lp_bin_new_cmd_block( struct cmd_block_list *list );
 
+unsigned lp_bin_data_size( const struct lp_bins *bins );
+
+unsigned lp_bin_cmd_size( const struct lp_bins *bins, unsigned x, unsigned y );
+
 
 /**
  * Allocate space for a command/data in the bin's data buffer.