gallivm/llvmpipe: fix 64-bit %ll format compiler warnings for mingw32
[mesa.git] / src / gallium / drivers / llvmpipe / lp_scene.h
index dee780c1cde22571b418064059d0cf1adc7c4a0f..622c522f11a01bc72ae84e55a37078b57b255b49 100644 (file)
@@ -41,6 +41,7 @@
 #include "lp_debug.h"
 
 struct lp_scene_queue;
+struct lp_rast_state;
 
 /* We're limited to 2K by 2K for 32bit fixed point rasterization.
  * Will need a 64-bit version for larger framebuffers.
@@ -50,7 +51,7 @@ struct lp_scene_queue;
 
 
 #define CMD_BLOCK_MAX 128
-#define DATA_BLOCK_SIZE (64 * 1024 - 2 * sizeof(void *))
+#define DATA_BLOCK_SIZE (64 * 1024)
 
 /* Scene temporary storage is clamped to this size:
  */
@@ -94,6 +95,7 @@ struct data_block {
 struct cmd_bin {
    ushort x;
    ushort y;
+   const struct lp_rast_state *last_state;       /* most recent state set in bin */
    struct cmd_block *head;
    struct cmd_block *tail;
 };
@@ -207,7 +209,7 @@ lp_scene_alloc( struct lp_scene *scene, unsigned size)
    assert(block != NULL);
 
    if (LP_DEBUG & DEBUG_MEM)
-      debug_printf("alloc %d block %d/%d tot %d/%d\n",
+      debug_printf("alloc %u block %u/%u tot %u/%u\n",
                   size, block->used, DATA_BLOCK_SIZE,
                   scene->scene_size, LP_SCENE_MAX_SIZE);
 
@@ -240,7 +242,7 @@ lp_scene_alloc_aligned( struct lp_scene *scene, unsigned size,
    assert(block != NULL);
 
    if (LP_DEBUG & DEBUG_MEM)
-      debug_printf("alloc %d block %d/%d tot %d/%d\n",
+      debug_printf("alloc %u block %u/%u tot %u/%u\n",
                   size + alignment - 1,
                   block->used, DATA_BLOCK_SIZE,
                   scene->scene_size, LP_SCENE_MAX_SIZE);
@@ -297,7 +299,7 @@ lp_scene_bin_command( struct lp_scene *scene,
 
    assert(x < scene->tiles_x);
    assert(y < scene->tiles_y);
-   assert(cmd <= LP_RAST_OP_END_QUERY);
+   assert(cmd < LP_RAST_OP_MAX);
 
    if (tail == NULL || tail->count == CMD_BLOCK_MAX) {
       tail = lp_scene_new_cmd_block( scene, bin );
@@ -318,6 +320,30 @@ lp_scene_bin_command( struct lp_scene *scene,
 }
 
 
+static INLINE boolean
+lp_scene_bin_cmd_with_state( struct lp_scene *scene,
+                             unsigned x, unsigned y,
+                             const struct lp_rast_state *state,
+                             unsigned cmd,
+                             union lp_rast_cmd_arg arg )
+{
+   struct cmd_bin *bin = lp_scene_get_bin(scene, x, y);
+
+   if (state != bin->last_state) {
+      bin->last_state = state;
+      if (!lp_scene_bin_command(scene, x, y,
+                                LP_RAST_OP_SET_STATE,
+                                lp_rast_arg_state(state)))
+         return FALSE;
+   }
+
+   if (!lp_scene_bin_command( scene, x, y, cmd, arg ))
+      return FALSE;
+
+   return TRUE;
+}
+
+
 /* Add a command to all active bins.
  */
 static INLINE boolean